多校联合的题,之前竟然没有补,今天补上。
这个题的区间具有不可重叠性。
用线段树存放的是一个起点固定的 (不同数字数加l*k);
code:

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<cmath>
using namespace std;const int maxn=60010;
const double eps=1e-5;struct node
{int l,r;double add;double mn;
}tree[maxn<<2];void pushup(int index)
{tree[index].mn=min(tree[index<<1].mn,tree[index<<1|1].mn);
}void pushdown(int index)
{tree[index<<1].mn+=tree[index].add;tree[index<<1|1].mn+=tree[index].add;tree[index<<1].add += tree[index].add;tree[index<<1|1].add += tree[index].add;tree[index].add=0.0;
}void build(int l,int r,int index,double k)
{tree[index].l=l;tree[index].r=r;tree[index].add=0.0;if(l==r){tree[index].mn=l*1.00*k;//printf("%d     %f\n",l,tree[index].mn);return ;}int mid=(l+r)>>1;build(l,mid,index<<1,k);build(mid+1,r,index<<1|1,k);pushup(index);
}void update(int l,int r,int index,double val)
{if(l<=tree[index].l&&tree[index].r<=r){tree[index].mn+=val;tree[index].add+=val;return ;}pushdown(index);int mid=(tree[index].l+tree[index].r)>>1;if(l<=mid){update(l,r,index<<1,val);}if(r>mid){update(l,r,(index<<1|1),val);}pushup(index);
}double query(int l,int r,int index)
{if(l<=tree[index].l&&tree[index].r<=r){return tree[index].mn;}pushdown(index);int mid=(tree[index].l+tree[index].r)>>1;double Min=1210000.0;if(l<=mid){Min=min(query(l,r,index<<1),Min);}if(r>mid){Min=min(query(l,r,index<<1|1),Min);}//cout<<Min<<endl;return Min;
}int pre[maxn];
int a[maxn];int main()
{int _case;scanf("%d",&_case);while(_case--){int n;scanf("%d",&n);memset(pre,0,sizeof(pre));memset(a,0,sizeof(a));for(int i=1;i<=n;i++){scanf("%d",a+i);}double left=0.0;double right=1.00;while(right-left>eps){memset(pre,0,sizeof(pre));double mid=(right+left)/2.00;build(1,n,1,mid);bool flag=false;for(int i=1;i<=n;i++){int R=pre[a[i]];/*printf("%d    %d\n",R+1,i);*/update(R+1,i,1,1.00);pre[a[i]]=i;/*for(int j=1;j<=i;j++){cout<<j<<"           "<< query(j,j,1)<<endl;}*/if(query(1,i,1)<=mid+mid*(double)i){//printf("i=%d      you=%f\n",i,mid+mid*(double)i);flag=true;break;}}if(flag){right=mid;}else{left=mid;}}printf("%.10f\n",(left+right)/2.00);}return 0;
}

HDU6070(线段树)相关推荐

  1. 【二分】【线段树】hdu6070 Dirt Ratio

    size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n). last[r]表示a[r]上一次出现的位置, 就是二分验证 ...

  2. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  3. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  4. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  5. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  6. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  7. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  8. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  9. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

  10. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

最新文章

  1. VC使用ActiveX控件常见问题
  2. html页面sql注入,再谈SQL注入入侵动网SQL版-ASP TO HTML WITH TEMPLATE3
  3. 深入解析Java锁机制
  4. 解决Windows Git Bash中文乱码问题
  5. DataParallel 笔记
  6. Python 微信机器人-通过wxpy库向指定名称的好友发送微信消息实例演示
  7. Iterator接口介绍
  8. 如果再这么玩下去,中国的科研就没戏了
  9. android edittext 正则限制,Android EditText 使用正则表达式进行输入过滤
  10. python正弦波和等腰三角波_正弦波脉宽调制(SPWM)原理
  11. 使用SQL命令行更改数据库字段类型
  12. delphi连接sql server的字符串2011-10-11 16:07
  13. java自定义事件案例_Java Custom Exception Example(Java自定义异常案例)
  14. Mac计算查看文件Md5
  15. C语言中%d,%o,%f,%e,%x的意义
  16. idea中translation插件显示网络异常(试一试)
  17. 号称超越ETH、吊打EOS,技术流IOST的底气到底在哪里?
  18. 手机怎么做个人简历?多行业简历模板自由选择
  19. C#图片截取压缩(百分比压缩/大小压缩)实现代码
  20. 什么是Java / JVM中的-Xms和-Xms参数(已更新至Java 13)

热门文章

  1. EEPROM与FLASH闪存到底有什么区别?
  2. 教你制作Linux系统的安装盘
  3. 计算机操作系统进程管理总结
  4. virtualxposed使用教程_VirtualXposed框架虚拟机——无需root体验xposed框架
  5. Windows 搭建Syslog、RSyslog日志服务器
  6. 微信缓存文件要这样处理,分分钟多出几个G!
  7. Linux中运行shell脚本的几种方式及其区别(source . ./myscript.sh sh myscript.sh)
  8. 符号——Alt+数字键
  9. Ubuntu 查看系统版本
  10. 保姆教程 | YOLOv5在建筑工地中安全帽佩戴检测的应用