做多校的时候只想到用线段树维护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. 模型量化--TBN:Convolutional Neural Network with Ternary Inputs and Binary Weights
  2. 资源 | 来自独秀同学的深度网络数学笔记,还不快收藏?
  3. 使用reveal.js制作PPT,并部署至GitHub
  4. 三、Go语言控制语句
  5. 图片安全保护(未启动)
  6. 【转】Wireshark网络抓包(三)——网络协议
  7. ZJU期末考试记录(研究生)——数据挖掘
  8. java 获取继承字段_java – 从类中获取所有字段(甚至是私有的和继承的)
  9. Linux学习笔记9
  10. 理解 Android 消息机制
  11. 【蓝桥杯嵌入式】【STM32】10_InputCaputer之输入捕获
  12. 点广告才可以下载的代码
  13. Old ST-LINK firmware detected.do you want to upgrade it?已解决,stlink升级
  14. 【QT】QT从零入门教程(十四):标准颜色对话框类QColorDialog
  15. NODE_ENV跨平台设置
  16. 3.Docker技术入门与实战 --- 使用Docker镜像
  17. Atitit 项目风险管理 目录 1. 技术分险 2 1.1. 全面跟随大公司解决方案 2 1.2. 过度设计 2 1.3. 可读性 扩展性不足 2 1.4. 教条僵化 2 1.5. 技术方案超出了
  18. 新浪 java sdk_新浪微博Java SDK开发
  19. What?模电比数电难学?
  20. 大二文本分词过滤分类实验总结

热门文章

  1. 【C语言】pow函数的模拟实现(递归)
  2. 关于雅虎邮箱的Foxmail,outlook设置。
  3. 四川大学计算机徐教授,我院举行“BIM实验室开放+徐教授专题讲座”活动
  4. [转]采购订单或采购申请审批状态为IN PROCESS的解决方法
  5. 苹果11触屏不灵敏_苹果iPhone11Pro屏幕失灵怎么办
  6. CSS3:boder-radius
  7. html怎么偏左居中,word文档偏左怎么调到中间
  8. winxp网络找不到计算机,WinXP系统电脑打开WiFi搜索不到无线网络的解决方法
  9. PyCharm中 Django导入views时出现报错红线
  10. java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况...