HDU 6070 线段树
题意:求AC率,x/y 的最小值,x是区间数字的种类数,y是区间的长度。
分析:
二分答案比率。ans,

动态插入结点,一些区间的size会发生变化,是那些前面暂时没有新的结点的区间 size + 1。
ans*l,每一个区间只有一个ans*l,只与 l 相关,线段树单点更新。
用线段树维护区间的最小值。最小值小于 ans,二分左移。
#include <bits/stdc++.h>
using namespace std; const int maxn = ;
const int eps = 1e-;
int a[maxn]; int last[maxn]; double tree[maxn<<],add[maxn<<]; void pushdown(int root)
{
tree[root<<]+=add[root];
tree[root<<|]+=add[root];
add[root<<]+=add[root];
add[root<<|]+=add[root];
add[root]=;
} void update(int l,int r,int L,int R,int root,double k)
{
if(l<=L&&R<=r)
{
tree[root]+=k;
add[root]+=k;
return ;
}
if(add[root]>eps)pushdown(root);
int mid=L+R>>;
if(r<=mid)update(l,r,L,mid,root<<,k);
else if(l>mid)update(l,r,mid+,R,root<<|,k);
else
{
update(l,mid,L,mid,root<<,k);
update(mid+,r,mid+,R,root<<|,k);
}
tree[root]=min(tree[root<<],tree[root<<|]);
} double query(int l,int r,int L,int R,int root)
{
if(l<=L&&R<=r)
return tree[root];
if(add[root]>eps)pushdown(root);
int mid=L+R>>;
if(r<=mid)return query(l,r,L,mid,root<<);
else if(l>mid)return query(l,r,mid+,R,root<<|);
else return min(query(l,mid,L,mid,root<<),query(mid+,r,mid+,R,root<<|));
tree[root]=min(tree[root<<],tree[root<<|]);
} int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n); for(int i=; i<=n; i++)
scanf("%d",&a[i]);
double l = ,r=1.0; for(int g=; g<; g++)
{ double mid = (l+r)/2.0;
memset(tree,,sizeof(tree));
memset(add,,sizeof(add));
memset(last,,sizeof(last)); int flag = ;
for(int i=; i<=n; i++)
{
update(last[a[i]]+,i,,n,,);
update(i,i,,n,,mid*i);
last[a[i]] = i;
double k = query(,i,,n,);
if(k<=(double)mid*(i+))
{
flag=;
break;
}
} if(flag!=) l = mid;
else r = mid;
} printf("%.10lf\n",l); }
return ;
}
HDU 6070 线段树的更多相关文章
- HDU 6070 (线段树)(统计颜色)
HDU 6070 Partition Problem : 给一段长度为n的序列,要求找出一段区间,使得这段区间的数字种类除以区间长度最小.输出最后的答案即可.(n <= 60000)(9s时限) ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- 网络编程api bind函数细节 select 细节
struct sockaddr_in bindaddr; bindaddr.sin_family = AF_INET; bindaddr.sin_addr.s_addr = htonl(INADDR_ ...
- select简单示例,有注释
全部都在代码中: import select import socket import queue """ 简单的select 实现echo server 个人理解: s ...
- linux文件夹权限问题
linux下 ls 某文件夹需要文件夹有 r 读权限. cd 某文件夹 需要文件夹有 x 运行权限 参考: http://www.linuxidc.com/Linux/2016-11/136959.h ...
- 周记1——WebSocket入门
一周复一周,时间过得飞快,每个周末都是很开心却又很彷徨.开心的是不用工作,彷徨的是自己这周学到了什么.自身的技能有没有提高.如何应对这个日新月异的社会... 本周的工作的开发IM(即时聊天)模块,要用 ...
- Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name
添加一下依赖 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...
- 关于日常使用Azure MySQL中遇到的连接问题以及排查方法分享
由于防火墙问题,TCP keep alive 问题,以及 MySQL 自身的参数问题这三个在使用中比较常见,所以今天就分享下自己找到的排查方法. 今天先聊一聊防火墙问题 大多数人在第一次创建 MySQ ...
- CMS API Overview - 翻译
source: http://activemq.apache.org/cms/cms-api-overview.html 1. CMS是啥? C++版本的API,用于收发消息(JMS). 如果您已熟悉 ...
- 梁宇轩 mysql 语句学习一 对表的操作
1.SHOW TABLES; -- 查询库中所有的表 2 .CREATE TABLE test(id INT(20) PRIMARY KEY NOT NULL AUTO_INCRE ...
- Linux ARP代理 与 NAT
有时候我们会在一个已有网络(10.10.10.0/24)内组建一个实验网络(192.168.1.0/24),网络结构如上图所示. 假设我们不能控制(修改)A网络内除D主机以外的系统配置,但可以完全控制 ...
- querySelector()与querySelectorAll()的区别及NodeList和HTMLCollection对象的区别
querySelector().Document.Element类型均可调用该方法. 当用Document类型调用querySelector()方法时,会在文档元素范围内查找匹配的元素:而当用Elem ...