size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n)。

last[r]表示a[r]上一次出现的位置,

就是二分验证mid的时候,先把线段树的每个位置i置成mid*i,然后再枚举右端点r,对[last[r]+1,r]作区间+1,然后check此时的前缀最小值是否小于等于mid*(r+1)即可。

据说这个是“01分数规划”?哪位dalao求解释一下……(我 01分数规划 只做过 最优比率生成树……)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
const double EPS = 0.0000001;
int T;
int n,a[60010],last[60010],now[60010];
double minv[60010<<2];
double delta[60010<<2];
void pushdown(int rt)
{
if(delta[rt])
{
delta[rt<<1]+=delta[rt];
delta[rt<<1|1]+=delta[rt];
minv[rt<<1]+=delta[rt];
minv[rt<<1|1]+=delta[rt];
delta[rt]=0;
}
}
void update(int ql,int qr,double v,int rt,int l,int r)
{
if(ql<=l&&r<=qr)
{
delta[rt]+=v;
minv[rt]+=v;
return;
}
pushdown(rt);
int m=(l+r)>>1;
if(ql<=m) update(ql,qr,v,lson);
if(m<qr) update(ql,qr,v,rson);
minv[rt]=min(minv[rt<<1],minv[rt<<1|1]);
}
double query(int ql,int qr,int rt,int l,int r)
{
if(ql<=l&&r<=qr)
return minv[rt];
pushdown(rt);
int m=(l+r)>>1;
double res=2147483647.0;
if(ql<=m) res=min(res,query(ql,qr,lson));
if(m<qr) res=min(res,query(ql,qr,rson));
return res;
}
bool check(double ratio){
memset(minv,0,sizeof(minv));
memset(delta,0,sizeof(delta));
for(int i=1;i<=n;++i){
update(i,i,ratio*(double)i,1,1,n);
}
for(int i=1;i<=n;++i){
update(last[i]+1,i,1.0,1,1,n);
if(query(1,i,1,1,n)-ratio*(double)(i+1)<EPS){
return 1;
}
}
return 0;
}
int main(){
scanf("%d",&T);
for(;T;--T){
memset(now,0,sizeof(now));
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;++i){
last[i]=now[a[i]];
now[a[i]]=i;
}
double l=0.0,r=1.0;
while(r-l>EPS){
double mid=(l+r)*0.5;
if(check(mid)){
r=mid;
}
else{
l=mid+EPS;
}
}
printf("%.10lf\n",l);
}
return 0;
}

最新文章

  1. Atiti &#160;qq空间破解(3)------------gui图形化通用cli执行器atiuse
  2. 【Java基础】创建和销毁对象
  3. 简析一下SQL Server里面Fast_Forword 和 SRROLL 的区别
  4. 导出excel失败,提醒提示加载类型库/DDL出错
  5. 制作OpenStack用的RHEL7系统镜像
  6. c++builder向c#开发的webservice传递非数字参数
  7. LabVIEW新手5大错误
  8. 转:apache 的mod-status
  9. 【Tomcat】Invalid character found in the request target
  10. redis动态配置
  11. 依赖注入[6]: .NET Core DI框架[编程体验]
  12. Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that
  13. Spring之c3p0连接池配置和使用
  14. 浅谈 PHP Yaf 开启session之后对响应头的影响
  15. 【Learning】矩阵树定理 Matrix-Tree
  16. Concat层解析
  17. 安装oracle 11gr2 rac on solaris
  18. spring注解@Value取不到值【转】
  19. void指针意义、Const、volatile、#define、typedef、接续符
  20. Apache的Mod_rewrite学习 (RewriteCond重写规则的条件) 转

热门文章

  1. 阿里云服务器下安装配置 vsftpd —— 基于CentOS 6.3 【简洁版】
  2. CentOS7修改默认运行级别
  3. 运维开发:python websocket网页实时显示远程服务器日志信息
  4. centos 安装flash
  5. mysql 5.6在gtid复制模式下复制错误,如何跳过??
  6. [hadoop][会装]zookeeper安装
  7. C++11——Use auto keyword in C++11
  8. vue轮播,不是只有左右切换的,还有只切换src的
  9. 【python】pymongo中正则查询时的转义问题
  10. 简写代码:当变量为false时[&#39;&#39;,false,null,undefined,0,NaN]时,返回默认值