/**
题目: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 二分+线段树的更多相关文章

  1. 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 ...

  2. HDU 6070 Dirt Ratio(线段树)

    Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Tot ...

  3. hdu6070(分数规划/二分+线段树区间更新,区间最值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 给出一个题目提交序列, 从中选出一个正确率最小的子串. 选中的子串中每个题目当且仅当最 ...

  4. HDU4614 Vases and Flowers 二分+线段树

    分析:感觉一看就是二分+线段树,没啥好想的,唯一注意,当开始摆花时,注意和最多能放的比大小 #include<iostream> #include<cmath> #includ ...

  5. J - Joseph and Tests Gym - 102020J (二分+线段树)

    题目链接:https://cn.vjudge.net/contest/283920#problem/J 题目大意:首先给你n个门的高度,然后q次询问,每一次询问包括两种操作,第一种操作是将当前的门的高 ...

  6. Educational Codeforces Round 61 D 二分 + 线段树

    https://codeforces.com/contest/1132/problem/D 二分 + 线段树(弃用结构体型线段树) 题意 有n台电脑,只有一个充电器,每台电脑一开始有a[i]电量,每秒 ...

  7. 【BZOJ-3110】K大数查询 整体二分 + 线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Sta ...

  8. K-th occurrence HDU - 6704 (后缀数组+二分线段树+主席树)

    大意: 给定串s, q个询问(l,r,k), 求子串s[l,r]的第kk次出现位置. 这是一篇很好的题解: https://blog.csdn.net/sdauguanweihong/article/ ...

  9. 【二分】【线段树】hdu6070 Dirt Ratio

    size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n). last[r]表示a[r]上一次出现的位置, 就是二分验证 ...

随机推荐

  1. ubuntu 不是 识别 android 设备 解决方法

    ubuntu: 在终端输入lsusb: langu@langu:~$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root ...

  2. 转: android sdk for mac

    转:http://www.cnblogs.com/yjmyzz/p/4219829.html 众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾andro ...

  3. Android 自定义数字加减器

    该自定义View主要是实现一款效果不错的数字加减器的功能的,但是也可以自定义选择器的外观颜色等. 1.自定义View的布局(add_sub_view.xml) <?xml version=&qu ...

  4. JavaScript,JS如何控制input输入字符限制

    ENTER键可以让光标移到下一个输入框 <input onkeydown="if(event.keyCode==13)event.keyCode=9" > 只能是中文& ...

  5. LinkedIn架构这十年

    原文: A Brief History of Scaling LinkedIn 2003年是LinkedIn元年,公司成立的目标是连接你的个人人脉以获得更好的的工作机会.上线第一周才有2700个会员注 ...

  6. Ubuntu 下安装adobe reader

    ctrl+alt+t打开终端 wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux ...

  7. JMeter 二:执行顺序 & 支持的协议

    执行顺序 参考:http://jmeter.apache.org/usermanual/test_plan.html#executionorder 不同种类元素之间,执行顺序如下: Configura ...

  8. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读

    ---------------------------------------------------------------------------------------------------- ...

  9. 【Hibernate步步为营】--锁机制具体解释

    上篇文章具体讨论了hql的各种查询方法.在讨论过程中写了代码演示样例.hql的查询方法类似于sql,查询的方法比較简单,有sql基础的开发者在使用hql时就会变得相当的简单. Hibernate在操作 ...

  10. 为Drupal7.22添加富编辑器 on Ubuntu 12.04

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 基本上就是按照Drupal7宝典里描述的进行设置的. 1. 下载wysiwyg 2.   ...