hdu6070Dirt Ratio 多校题 套路二分
比赛中我看了一眼题目就觉得是二分的套路,跟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 多校题 套路二分的更多相关文章
- BFS简单题套路_Codevs 1215 迷宫
BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
- CF1114E Arithmetic Progression(交互题,二分,随机算法)
既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知 ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- CodeForces 474B Worms (水题,二分)
题意:给定 n 堆数,然后有 m 个话询问,问你在哪一堆里. 析:这个题是一个二分题,但是有一个函数,可以代替写二分,lower_bound. 代码如下: #include<bits/stdc+ ...
- CDOJ 1277 智商杯考试 每周一题 div2 二分+数学
智商杯考试 题目连接: http://acm.uestc.edu.cn/#/problem/show/1277 Description 你是一个挂科选手. 你现在正在考试,你很方. 你参加的考试叫做智 ...
- 【BZOJ4590】[Shoi2015]自动刷题机 二分
[BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...
- BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案
二分答案水题. #include <cstdio> #include <cstring> #include <iostream> #include <algo ...
- Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...
随机推荐
- BZOJ 1726 [Usaco2006 Nov]Roadblocks第二短路:双向spfa【次短路】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1726 题意: 给你一个无向图,求次短路. 题解: 两种方法. 方法一: 一遍spfa,在s ...
- chrome浏览器常用快捷键
chrome浏览器常用快捷键 一.总结 一句话总结: Ctrl + j:打开“下载内容”页 Ctrl + t:打开新的标签页,并跳转到该标签页 Ctrl + d:将当前网页保存为书签 1.在新标签页中 ...
- linux下MySQL5.6安装记录
MySQL下载地址: ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.6/http://mirrors.sohu.com/mysql/ ...
- c语言字符串 数字转换函数大全
最近学数据结构老是做实验 常用到字符串和数字的转换 想找却发现网上的资料太散 所以搜集整理一下 方便以后再用 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转 ...
- codeforces 569B B. Inventory(水题)
题目链接: B. Inventory time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- zepto.fullpage
内容来自:颜海镜 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- tcpdump抓包工具用法说明
tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: ...
- 《TCP/IP详解卷一:协议》 概述
分层 TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统. 链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算 ...
- 好文章!转载嵌入式LINUX
整理了嵌入式linux学习路线供参考,希望对您有所参考价值! 一.linux入门 目前嵌入式主要开发环境有 Linux.Wince等:Linux因其开源.开发操作便利而被广泛采用.而Linux操作系统 ...
- Collection与Map总结
顺序表和链表统称为线性表:顺序表一般表现为数组,如:ArrayList的实现;链表有单链表.双链表.循环链表的区分,如:LinkedArrayList由双链表+哈希表实现