题意:求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 ;
}

最新文章

  1. 运用TensorFlow处理简单的NLP问题
  2. 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
  3. C#调试入门篇
  4. oracle中SET DEFINE意思
  5. android怎么连接sqlite数据库?
  6. 由函数clock想到的
  7. WPF入门学习
  8. 函数对象的prototype总结
  9. Java遍历Map、List、Array
  10. sql server 主从数据库同步 利用发布 订阅是实现
  11. 我的MYSQL学习心得(七)
  12. nodejs+mongoose+websocket搭建xxx聊天室
  13. Spring中使用RedisTemplate操作Redis(spring-data-redis)
  14. NPOI 修改已存在的excel文件,设置第一行行高
  15. 20165223《JAVA程序设计》第二周学习总结
  16. C# GUID生成
  17. 泡泡一分钟:Motion Planning for a Small Aerobatic Fixed-Wing Unmanned Aerial Vehicle
  18. 面试必问:Spring循环依赖的三种方式
  19. 第四十二课 KMP算法的应用
  20. DEMO: springboot 与 mybatis 集成

热门文章

  1. Java调度线程池ScheduleExecutorService(续)
  2. 写些最近两个学安卓的笔记-关于Toast
  3. Ubuntu系统里下载安装配置redis-2.2.13.tar.gz
  4. java集合常用操作
  5. java I/O流 温习随笔
  6. [转]Create Custom Exception Filter in ASP.NET Core
  7. 阿里巴巴国际站 网站和PC客户端都登录不了,其他电脑或手机可以
  8. linux下(ubuntu)反删除(误删恢复)与回收站制作
  9. win10下MySQL 5.7.20解压版安装步骤
  10. PAT 1037 Magic Coupon