/**
题目: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. [视频解说]Java(JDK的下载安装及第一个程序执行)

    (JDK的下载安装及第一个程序执行) 内容:Java JDK 的安装以及HelloWorld 程序的执行 欢迎童鞋们前往围观 http://v.youku.com/v_show/id_XODA3Mzk ...

  2. Sqlite-Sqlite3中的数据类型

    大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的.刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列. Sqlite使用一个 ...

  3. 算法笔记_083:蓝桥杯练习 合并石子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ...

  4. 算法笔记_060:蓝桥杯练习 出现次数最多的整数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统 ...

  5. web页面查看Tomcat服务器指标

    在进行性能测试时,一般都需要对应用服务器进行监控,监控的指标包括应用服务器的JVM使用状况.可用连接数.队列长度等信息.商业的应用服务器如WebLogic.WebSphere等都提供了Console对 ...

  6. 【Linux】监控系统的状态

    1.w命令 w命令是一个很强大的命令,该命令显示的信息比较丰富.以下是我的虚拟机w命令的一个展示 从上图我们可以看到: 第一行从左面开始显示的信息依次为:时间.系统运行时间.登陆用户数.平均负载 第二 ...

  7. jconsole JDK1.6 使用手册 (转)

    转载出处 文章作者:hornet 本文地址:http://hornetblog.sinaapp.com/?p=5 英文版地址: http://download.oracle.com/javase/6/ ...

  8. iOS百度地图

    一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...

  9. Struts2中的变量

    <package name="mypackage" extends="struts-default"> <global-results> ...

  10. 安装 Tomcat

    安装 Tomcat(.exe)  而 .rar文件则只需解压即可使用. 点击 apache-tomcat-7.0.55.exe 进行安装: 在“Configuration”: Server Shutd ...