[HDU6070] Dirt Ratio
来源:互联网 发布:君学书院 知乎 编辑:程序博客网 时间:2024/05/22 09:42
Problem Link
Description
给出一个长度为
Solution
暴力是
Code
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#define M 60005#define P 10000using namespace std;template <class T>inline void Rd(T &res){ char c;res=0;int k=1; while(c=getchar(),c<48&&c!='-'); if(c=='-'){k=-1;c='0';} do{ res=(res<<3)+(res<<1)+(c^48); }while(c=getchar(),c>=48); res*=k;}template <class T>inline void Pt(T res){ if(res<0){ putchar('-'); res=-res; } if(res>=10)Pt(res/10); putchar(res%10+48);}struct node{ int L,R,mi,add;}tree[M<<2];int T;int n;int A[M];void up(int p){ tree[p].mi=min(tree[p<<1].mi,tree[p<<1|1].mi);}void down(int p){ if(!tree[p].add)return; tree[p<<1].add+=tree[p].add; tree[p<<1].mi+=tree[p].add; tree[p<<1|1].add+=tree[p].add; tree[p<<1|1].mi+=tree[p].add; tree[p].add=0;}void build(int L,int R,int p,int lim){ tree[p].L=L;tree[p].R=R;tree[p].add=0; if(L==R){ tree[p].mi=L*lim; return; } int mid=(L+R)>>1; build(L,mid,p<<1,lim); build(mid+1,R,p<<1|1,lim); up(p);}void update(int L,int R,int p){ if(tree[p].L==L&&tree[p].R==R){ tree[p].add+=P; tree[p].mi+=P; return; } down(p); int mid=(tree[p].L+tree[p].R)>>1; if(R<=mid)update(L,R,p<<1); else if(L>mid)update(L,R,p<<1|1); else{ update(L,mid,p<<1);update(mid+1,R,p<<1|1); } up(p);}int query(int L,int R,int p){ if(tree[p].L==L&&tree[p].R==R)return tree[p].mi; down(p); int mid=(tree[p].L+tree[p].R)>>1; if(R<=mid)return query(L,R,p<<1); if(L>mid)return query(L,R,p<<1|1); return min(query(L,mid,p<<1),query(mid+1,R,p<<1|1));}int pos[M];bool check(int lim){ memset(pos,0,sizeof(pos)); build(1,n,1,lim); for(int i=1;i<=n;i++){ update(pos[A[i]]+1,i,1); pos[A[i]]=i; int res=query(1,i,1); if(res<=(i+1)*lim)return true; } return false;}int main(){ Rd(T); while(T--){ Rd(n); for(int i=1;i<=n;i++)Rd(A[i]); int L=0,R=P,res=0; while(L<=R){ int mid=(L+R)>>1; if(check(mid)){ res=mid; R=mid-1; }else L=mid+1; } printf("%.4lf",1.0*res/P); putchar('\n'); } return 0;}
个人感觉二分是蛮好想到的,但是这个
阅读全文
2 0
- hdu6070 Dirt Ratio
- HDU6070-Dirt Ratio
- hdu6070 Dirt Ratio
- [HDU6070] Dirt Ratio
- HDU6070-Dirt Ratio
- HDU6070 [2017duoxiaolianhe4] Dirt Ratio xianduanshu + erfen
- HDU6070 Dirt Ratio(线段树+二分)
- hdu6070 Dirt Ratio(二分+线段树)
- HDU6070 2017杭电多校联赛第四场-Dirt Ratio
- 2017多校训练Contest4: 1004 Dirt Ratio hdu6070
- HDU6070 Dirt Ratio (01规划+线段树)
- (hdu6070)2017杭电多校联赛第四场-Dirt Ratio 线段树+二分
- hdu6070 Dirt Ratio (线段树:二分+多次建树+构造难想)
- hdu 6070 Dirt Ratio
- HDU 6070 Dirt Ratio
- HDU-6070 Dirt Ratio
- HDU 6070 Dirt Ratio
- HDU 6070 Dirt Ratio
- 【GISer小O】JAVA后台的小白之路(一)_1 ——进击吧奔跑的Sumlib Text
- hdu 3501 Calculation 2(欧拉函数+容斥原理)
- 【HNOI2016模拟4.1】神奇的字符串
- HDu3729最大匹配
- ios面试题,各大企业常见的ios面试题之六
- [HDU6070] Dirt Ratio
- 字典序全排列算法
- AC自动机fail指针不基于势能分析构造方法
- 缩放指数型线性单元(SELU)
- Lattice Diamond中VerilogHDL按键延时消抖
- Different Readers for different file types(Tensorflow 的几种读取数据的方式)
- 写在开始
- 特征值分解与奇异值分解含义
- 表单中日期选择、年月日时分秒的选择