做多校的时候只想到用线段树维护sz【L,R】的值,一顿瞎想全都是复杂度爆表的。。。。。。。还是太弱。
废话不说,先看题意,令F【L,R】为L,R区间内数字种数/数字总个数,求最小的F【L,R】。

即最小的【L,R】/(R-L+1)。

mid>=sz【L,R】/(R-L+1),化为 sz【L,R】+L*mid<=(R+1)*mid,很明显的分数规划了。
二分答案,枚举左端点R,然后用线段树维护区间的sz【L,R】+L*mid的最小值。每加入一个R,更新【pre【R】+1,R】,pre【R】为上一次出现R的位置。若线段树一个节点的值为5,6,7,该节点维护【5,R】,【6,R】,【7,R】的sz【L,R】+L*mid最小值。复杂度为O(knlong),k为二分次数。
#include <bits/stdc++.h>
#define eps 0.00001
#define MAXN 60010
#define INF 999999999
using namespace std ;
double sum[MAXN<<2],add[MAXN<<2];
int n,last[MAXN],pre[MAXN];
void pushup(int rt)
{sum[rt]=min(sum[rt<<1],sum[rt<<1|1]);
}
void build(int rt,int l,int r,double mid)
{add[rt]=0;if(l==r){sum[rt]=1.0*mid*l;return ;}int m=(l+r)>>1;build(rt<<1,l,m,mid);build(rt<<1|1,m+1,r,mid);pushup(rt);
}
void pushdown(int rt)
{if(add[rt]!=0){sum[rt<<1|1]+=add[rt];sum[rt<<1]+=add[rt];add[rt<<1|1]+=add[rt];add[rt<<1]+=add[rt];add[rt]=0;}
}
void update(int L,int R,int c,int l,int r,int rt)
{if(L<=l&&R>=r){sum[rt]+=c;add[rt]+=c;return ;}pushdown(rt);int m=(l+r)>>1;if(L<=m) update(L,R,c,l,m,rt<<1);if(R>m) update(L,R,c,m+1,r,rt<<1|1);pushup(rt);
}
double query(int L,int R,int l,int r,int rt)
{if(L<=l&&R>=r){return sum[rt];}pushdown(rt);int m=(l+r)>>1;double ans=INF;if(L<=m) ans=min(ans,query(L,R,l,m,rt<<1));if(R>m) ans=min(ans,query(L,R,m+1,r,rt<<1|1));return ans;
}
bool solve(double mid)
{build(1,1,n,mid);for(int i=1;i<=n;i++){update(pre[i]+1,i,1,1,n,1);if(query(1,i,1,n,1)<=1.0*mid*(i+1.0)) return 1;}return 0;
}
int main()
{int t,x;scanf("%d",&t);while(t--){memset(last,-1,sizeof(last));memset(pre,0,sizeof(pre));scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&x);if(last[x]!=-1)pre[i]=last[x];last[x]=i;}double l=0,r=1.0,mid;while(r-l>eps){mid=(l+r)/2;if(solve(mid)) r=mid-eps;else l=mid;}printf("%.6f\n",r);}return 0;
}

HDU - 6070 线段树 + 分数规划相关推荐

  1. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  2. hdu 5367(线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...

  3. hdu 5266(线段树+LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 解题思路: 考虑dfs序,通过在简单的证明可知L~R的LCA为L ~R 中dfs序较小的那个位置 ...

  4. hdu 5124(线段树区间更新+lazy思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...

  5. HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询

    [题目描述] HDU - 4578Transformation Problem Description Yuanfang is puzzled with the question below: The ...

  6. poj 2777 AND hdu 5316 线段树

    区间染色问题,用线段树可以解决.颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色"或"起来,加上lazy标记,轻松AC. poj 2777: 1 ...

  7. HDU 5238 线段树+数论

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5238. 题解:给你长度为n的操作序列,和m组操作求每组操作的模29393的值.这道题直接显然是没有前途的, ...

  8. poj 2528 离散化+线段树 hdu 1698 线段树 线段树题目类型一:染色计数 外加离散化

    第一次听到离散化是今年省赛的时候,一道矩形并的题,很水,就两个矩形... 今天再去做线段树已经发现离散化忘得差不多了...水逼的悲哀啊... 先看简单点的hdu 1698 http://acm.hdu ...

  9. HDU 1166(线段树)

    线段树 1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 #define N 200010 ...

  10. hdu 4417(线段树OR树状数组)

    题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...

最新文章

  1. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定
  2. java-方法。(新手)
  3. 在安装one_gadget遇到 one_gadget requires Ruby version >= 2.4. 的问题解决
  4. 计算机专业颈椎有问题,出现这4个表现,你的颈椎病已经很严重了!上班族尤需警惕_39健康网...
  5. html表格右键可编辑,Bootstrap table右键功能实现方法
  6. Win32ASM学习[14]:符号扩展指令: CBW,CWDE,CDQ,CWD
  7. PowerShell命令测试--whatif参数
  8. EasyRecovery恢复数据的具体步骤是什么
  9. 知识竞赛的环节主题文件准备的四大步骤及重要提示
  10. php处理数组函数大全
  11. Oracle的方案(Schema)和用户(User)的区别
  12. 使用websocket实现协同编辑
  13. Flutter TextField 去掉下划线
  14. 三星i917官方wp7.8刷机、越狱、防锁全过程
  15. “匠心之韵,数据之美”之数字营销专访【友盟+】一周年:不忘初心,从整合到融合,从合并到合力...
  16. pythonspiit函数_python专题高阶函数
  17. 男は失恋夜盗11台奔スポーツカーエンブレム腹いせ(写真)
  18. Oracle 动态游标 PL/SQL 动态SQL语句 open for [using] 语句
  19. SMU Wunter(div.2)5
  20. 2008无线站点、客户端、手游TOP50揭晓!

热门文章

  1. 【Unity】打包WebGL项目遇到的问题及解决记录
  2. android 新浪微博分享提示签名错误,Android ShareSDK 微博分享 (8995)app auth fail for appKeysignpackage 解决...
  3. 802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
  4. 开发一款游戏需要什么技术
  5. 米家扫地机器人怎么加水_扫地机买什么 篇十:极速开箱! 米家扫地机1S 升级了啥?...
  6. U盘装win2012R2,win2016,win2019等超过4G安装盘的系统
  7. 分布式任务调度平台201902
  8. 2012工行软开中心-广州面试
  9. 卡方检验,U检验,t检验,F检验
  10. KEGG Pathway通路二级分类汇总,轻松找到感兴趣的通路