比赛中我看了一眼题目就觉得是二分的套路,跟miaom说,结果发现miaom开始碎觉

miaom醒来以后表示这是道凸包合并(%%%)

我&wzf2000:那您快写啊

miaom:我不会写啊

莫名其妙的忘记了最初二分的思路

赛后看题解,果然是套路移动右端点

假设要mid能达到,那么一定有一组lr满足d(l,r)/(r-l+1)<=mid (d为区间不同数的种数)

d(l,r)+l*mid<=(r+1)*mid

在右端点右移1的时候只有一个后缀的d会改变,于是能轻松维护所有左端点对应的值

 #include <bits/stdc++.h>
#define mi (l+r>>1)
#define eps 0.00001
#define INF 2000000000
using namespace std;
int n,T;
int a[],b[];
double tr[],flag[];
void add(int now,int l,int r,int x,int y,double z)
{
if(l==x && r==y)
{
tr[now]+=z;
flag[now]+=z;
return;
}
if(x<=mi) add(now<<,l,mi,x,min(mi,y),z);
if(y>mi) add(now<<|,mi+,r,max(mi+,x),y,z);
tr[now]=min(tr[now<<],tr[now<<|])+flag[now];
}
double que(int now,int l,int r,int x,int y)
{
if(l==x && r==y) return tr[now];
double ret=INF;
if(x<=mi) ret=min(ret,que(now<<,l,mi,x,min(mi,y)));
if(y>mi) ret=min(ret,que(now<<|,mi+,r,max(mi+,x),y));
return ret+flag[now];
}
bool check(double mid)
{
for(int i=;i<=n;i++)
b[i]=;
for(int i=;i<=*n;i++)
tr[i]=,flag[i]=;
for(int i=;i<=n;i++)
{
add(,,n,i,i,mid*i);
add(,,n,b[a[i]]+,i,);
b[a[i]]=i;
if(que(,,n,,i)<=mid*(i+))
return ;
}
return ;
}
int main()
{
for(scanf("%d",&T);T;T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
double l=,r=;
for(double mid=(l+r)/;r-l>eps;mid=(l+r)/)
if(check(mid)) r=mid;else l=mid;
printf("%.5f",l);
}
return ;
}

hdu6070Dirt Ratio 多校题 套路二分的更多相关文章

  1. BFS简单题套路_Codevs 1215 迷宫

    BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...

  2. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  3. CF1114E Arithmetic Progression(交互题,二分,随机算法)

    既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知 ...

  4. HDU 4768 Flyer (2013长春网络赛1010题,二分)

    Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. CodeForces 474B Worms (水题,二分)

    题意:给定 n 堆数,然后有 m 个话询问,问你在哪一堆里. 析:这个题是一个二分题,但是有一个函数,可以代替写二分,lower_bound. 代码如下: #include<bits/stdc+ ...

  6. CDOJ 1277 智商杯考试 每周一题 div2 二分+数学

    智商杯考试 题目连接: http://acm.uestc.edu.cn/#/problem/show/1277 Description 你是一个挂科选手. 你现在正在考试,你很方. 你参加的考试叫做智 ...

  7. 【BZOJ4590】[Shoi2015]自动刷题机 二分

    [BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...

  8. BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案

    二分答案水题. #include <cstdio> #include <cstring> #include <iostream> #include <algo ...

  9. Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分

    第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...

随机推荐

  1. BZOJ 1572 [Usaco2009 Open]工作安排Job:贪心 + 优先队列【先放再更新】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 题意: 有n个工作,每个工作有一个截止日期dead[i]和收益pay[i]. 完成一 ...

  2. jsonp跨域请求,动态script标签实现跨域

    1.什么是跨域 首先一个域名地址的组成是: http://www.xxx.com:8080/xxx/xxx.jsp 协议子域名主域名端口号请求资源地址 当协议.子域名.主域名.端口号中任意一个不相同时 ...

  3. 利用Python+阿里云实现DDNS(动态域名解析)

    引子我想大家应该都很熟悉DNS了,这回在DNS前面加了一个D又变成了什么呢?这个D就是Dynamic(动态),也就是说,按照传统,一个域名所对应的IP地址应该是定死的,而使用了DDNS后,域名所对应的 ...

  4. 网络编程学习笔记-listen函数

    listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接 ...

  5. 为什么修改头文件make不重新编译

    make是根据依赖文件的时间戳来决定要不要重新编译的.在: object: deplist # actions 中,可以把头文件加进deplist,这样修改头文件后,make就会重新编译了. 单纯地修 ...

  6. laravel登录后台500错误!

    登录页面正常显示,填写完用户名密码 点登录后 页面一片空白,没有任何输出.debug可以看到一个500错误,preview和response都是空的.追踪了一下 发现在public/index.php ...

  7. HihoCoder1654: XY游戏([Offer收割]编程练习赛39)(好久没写搜索)(已经超级简短了)

    描述 如下图所示,在4x4的棋盘上有X和Y两种棋子各若干枚:O表示空格. OXXY YOOX XOOY XOXX 小Hi每次可以选择任意一枚棋子,将它移动到上下左右相邻的空格中. 小Hi想知道最少移动 ...

  8. zero to one(1)

    How to google 这两天把之前的过期的账号重新弄了一下,在vutrl上的账号,普通的话现在2.5$只提供ipv6地址,如果是想google我觉得这个应该没有什么问题,或者可以买***的账号, ...

  9. BZOJ_3124_[Sdoi2013]直径_树形DP

    BZOJ_3124_[Sdoi2013]直径_树形DP Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵 ...

  10. C++ STL std::wstring_convert处理UTF8

    #include <iostream> #include <string> #include <locale> #include <codecvt> # ...