hdu6070 Dirt Ratio 二分+线段树
/**
题目:hdu6070 Dirt Ratio
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6070
题意:给定n个数,求1.0*x/y最小是多少。x表示一段区间内不同数字的个数,y表示区间长度。
思路:二分+线段树
二分答案x/y。 找一段区间满足 size(l,r)/(r-l+1) <= mid , size(l,r)表示[l,r]内不同数的个数。 size(l,r)<=mid(r-l+1) => size(l,r)+mid*l<=mid*(r+1); 用线段树维护size(l,r)+mid*l的最小值。每一个节点存储size(l,r)+mid*l,枚举r,更新当前a[r]到不包含该数字的节点值+1 */
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define lson L,m,rt<<1
#define rson m+1,R,rt<<1|1
const double eps = 1e-;
const int N = 6e4+;
double add[N<<], sum[N<<];
int last[N], a[N];
void pushup(int rt)
{
sum[rt] = min(sum[rt<<],sum[rt<<|]);
}
void pushdown(int rt)
{
sum[rt<<] += add[rt];
sum[rt<<|] += add[rt];
add[rt<<] += add[rt];
add[rt<<|] += add[rt];
add[rt] = ;
}
void update(int l,int r,int L,int R,int rt,double d)
{
if(l<=L&&R<=r){
sum[rt]+=d;
add[rt]+=d;
return ;
}
if(add[rt]>eps) pushdown(rt);
int m = (L+R)/;
if(r<=m) update(l,r,lson,d);
else if(l>m) update(l,r,rson,d);
else{
update(l,r,lson,d);
update(l,r,rson,d);
}
pushup(rt);
}
double query(int l,int r,int L,int R,int rt)
{
if(l<=L&&R<=r){
return sum[rt];
}
if(add[rt]>eps) pushdown(rt);
int m = (L+R)/;
double mis;
if(r<=m) mis = query(l,r,lson);
else if(l>m) mis = query(l,r,rson);
else mis = min(query(l,r,lson),query(l,r,rson));
pushup(rt);
return mis;
}
int main()
{
//freopen("C:\\Users\\accqx\\Desktop\\in.txt","r",stdin);
int T, n;
cin>>T;
while(T--)
{
scanf("%d",&n);
for(int i = ; i <= n; i++) scanf("%d",&a[i]);
double hi = , lo = , mid;
double temp;
while(hi-lo>eps){
mid = (hi+lo)/;
memset(add, , sizeof add);
memset(sum, , sizeof sum);
memset(last, , sizeof last);
int flag = ;
for(int i = ; i <= n; i++){
update(last[a[i]]+,i,,n,,);
update(i,i,,n,,mid*i);
temp = query(,i,,n,);
if(temp<=mid*(i+)){
flag = ; break;
}
last[a[i]] = i;
}
if(flag) hi = mid;
else lo = mid;
}
//cout<<mid<<endl;
printf("%.10f\n",mid);
}
return ;
}
hdu6070 Dirt Ratio 二分+线段树的更多相关文章
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...
- HDU 6070 Dirt Ratio(线段树)
Dirt Ratio Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Tot ...
- hdu6070(分数规划/二分+线段树区间更新,区间最值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 给出一个题目提交序列, 从中选出一个正确率最小的子串. 选中的子串中每个题目当且仅当最 ...
- HDU4614 Vases and Flowers 二分+线段树
分析:感觉一看就是二分+线段树,没啥好想的,唯一注意,当开始摆花时,注意和最多能放的比大小 #include<iostream> #include<cmath> #includ ...
- J - Joseph and Tests Gym - 102020J (二分+线段树)
题目链接:https://cn.vjudge.net/contest/283920#problem/J 题目大意:首先给你n个门的高度,然后q次询问,每一次询问包括两种操作,第一种操作是将当前的门的高 ...
- Educational Codeforces Round 61 D 二分 + 线段树
https://codeforces.com/contest/1132/problem/D 二分 + 线段树(弃用结构体型线段树) 题意 有n台电脑,只有一个充电器,每台电脑一开始有a[i]电量,每秒 ...
- 【BZOJ-3110】K大数查询 整体二分 + 线段树
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6265 Solved: 2060[Submit][Sta ...
- K-th occurrence HDU - 6704 (后缀数组+二分线段树+主席树)
大意: 给定串s, q个询问(l,r,k), 求子串s[l,r]的第kk次出现位置. 这是一篇很好的题解: https://blog.csdn.net/sdauguanweihong/article/ ...
- 【二分】【线段树】hdu6070 Dirt Ratio
size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n). last[r]表示a[r]上一次出现的位置, 就是二分验证 ...
随机推荐
- 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...
- PHP基础知识(二)
Global namespace //看不懂看下面的中文 中英结合看看 When using namespaces, you may find that internal functions(内部( ...
- 使用jsmin压缩javascript脚本
官方地址:http://www.crockford.com/javascript/jsmin.html 点击页下方的”zip file containing an MS-DOS.exe file“下载 ...
- VS2013编译boost1.55库
1. 官网下载最新的Boost库,我的是1.55 2. 在使用vs2013编译boost-1.55.0之前,先要给boost做下修改: boost_1_55_0\boost\intrusive\det ...
- iOS 证书管理.p12文件不能导出
iOS证书不能导出p12文件: 首先要确认证书是从你这个电脑上制作生成的! 钥匙串-->我的证书--->右键,就可以导出了!
- taro + taro-ui + dva
taro的安装及使用 安装 Taro 开发工具 @tarojs/cli 使用 npm 或者 yarn 全局安装,或者直接使用npx $ npm install -g @tarojs/cli $ yar ...
- Android Exception 11(baidumapsdk(15405): Authentication Error errorcode: 102 uid)
08-12 16:06:12.622: E/baidumapsdk(15405): Authentication Error errorcode: 102 uid: null appid -1 msg ...
- location.href
location.href用法 CreateTime--2018年2月22日15:22:02 Author:Marydon 1.在当前页面打开URL页面 // 方式一 window.locatio ...
- EMQ配置“ClientId 认证”
EMQ配置“ClientId 认证” 基于 MQTT 客户端 ID 认证 clientId配置文件地址 /etc/emqttd/plugins/emq_auth_clientid.conf 内容如下: ...
- python 高级语法
#coding:utf-8 #定义一个装饰器函数 def doc_func(func): #包裹函数(闭包) def warpfunc(): #做一些额外的事情 print "%s call ...