hdu4417 划分树+二分
- //Accepted 14796 KB 453 ms
- //划分树
- //把查询的次数m打成n,也是醉了一晚上!!!
- //二分l--r区间第k大的数和h比较
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <queue>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- /**
- * This is a documentation comment block
- * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
- * @authr songt
- */
- ;
- struct node
- {
- int val[imax_n];
- int num[imax_n];
- }f[];
- int a[imax_n];
- int sorted[imax_n];
- int n,m;
- void build(int t,int l,int r)
- {
- if (l==r) return ;
- ;
- ;
- ;
- for (int i=l;i<=r;i++)
- if (f[t].val[i]<sorted[mid]) isame--;
- int ln=l;
- ;
- for (int i=l;i<=r;i++)
- {
- if (i==l)
- {
- f[t].num[i]=;
- }
- ];
- if (f[t].val[i]<sorted[mid])
- {
- f[t].num[i]++;
- f[t+].val[ln++]=f[t].val[i];
- }
- else if (f[t].val[i]>sorted[mid])
- {
- f[t+].val[rn++]=f[t].val[i];
- }
- else
- {
- if (isame>same)
- {
- same++;
- f[t].num[i]++;
- f[t+].val[ln++]=f[t].val[i];
- }
- else
- {
- f[t+].val[rn++]=f[t].val[i];
- }
- }
- }
- build(t+,l,mid);
- build(t+,mid+,r);
- }
- int query(int t,int l,int r,int a,int b,int k)
- {
- if (l==r) return f[t].val[l];
- ;
- int s,ss;
- if (a==l)
- {
- ss=;
- s=f[t].num[b];
- }
- else
- {
- ss=f[t].num[a-];
- s=f[t].num[b]-ss;
- }
- if (s>=k)
- {
- a=l+ss;
- b=l+ss+s-;
- ,l,mid,a,b,k);
- }
- else
- {
- int b1=a-l-ss;
- -s;
- a=mid++b1;
- b=mid+b1+b2;
- ,mid+,r,a,b,k-s);
- }
- }
- int x,y,h;
- void slove()
- {
- build(,,n);
- ;i<=m;i++)
- {
- scanf("%d%d%d",&x,&y,&h);
- x++;
- y++;
- ,r=y-x+;
- ;
- ;
- while (l<=r)
- {
- mid=(l+r)/;
- ,,n,x,y,mid);
- //printf("pre :l=%d r=%d mid=%d t=%d\n",l,r,mid,t);
- ;
- else
- {
- ans=mid;
- l=mid+;
- }
- //printf("l=%d r=%d t=%d\n",l,r,t);
- }
- printf("%d\n",ans);
- }
- }
- int main()
- {
- int T;
- ;
- scanf("%d",&T);
- while (T--)
- {
- scanf("%d%d",&n,&m);
- ;i<=n;i++)
- {
- scanf("%d",&a[i]);
- f[].val[i]=sorted[i]=a[i];
- }
- sort(sorted+,sorted+n+);
- printf("Case %d:\n",++t);
- slove();
- }
- ;
- }
hdu4417 划分树+二分的更多相关文章
- HDU-4417 Super Mario,划分树+二分!
Super Mario 这个题也做了一天,思路是很清晰,不过二分那里写残了,然后又是无限RE.. 题意:就是查询区间不大于k的数的个数. 思路:裸划分树+二分答案.将区间长度作为二分范围.这个是重点. ...
- sdut 2610:Boring Counting(第四届山东省省赛原题,划分树 + 二分)
Boring Counting Time Limit: 3000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 In this problem you a ...
- SDIBT 3237 Boring Counting( 划分树+二分枚举 )
http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=3237 Problem H:Boring Counting Time Limit: 3 Sec ...
- HDU 4417 划分树+二分
题意:有n个数.m个询问(l,r,k),问在区间[l,r] 有多少个数小于等于k. 划分树--查找区间第k大的数.... 利用划分树的性质.二分查找在区间[l,r]小于等于k的个数. 假设在区间第 i ...
- HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)
题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...
- 【划分树+二分】HDU 4417 Super Mario
第一次 耍划分树.. . 模板是找第k小的 #include <stdio.h> #include <string.h> #include <stdlib.h> # ...
- 13年山东省赛 Boring Counting(离线树状数组or主席树+二分or划分树+二分)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 2224: Boring Counting Time Limit: 3 Sec ...
- HDU 4417 Super Mario(划分树+二分)
题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...
- poj 2104:K-th Number(划分树,经典题)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 35653 Accepted: 11382 Ca ...
随机推荐
- java 多线程4(死锁)
死锁现象: 死锁原因: 1.存在两个或两个以上的线程. 2.存在两个或两个或两个以上的共享资源. 死锁现象解决的方案: 没有方案只能尽量避免.
- Java 中String常用方法
java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len ...
- LaTeX内容总结
欢迎关注我的社交账号: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://gith ...
- text-overflow:ellipsis实现超出隐藏时省略号显示
text-overflow:ellipsis;要达到的效果是:文字超出容器宽度时,文字被隐藏的文字用省略号代替.所以该属性只能用于块状元素或行内块元素中,对行内元素是不起作用的. 一般和white-s ...
- Linux基础: 挂载镜像文件(Mount & ISO)
ISO/Ghost 镜像文件概念(裸机安装,无光驱安装,跨平台安装) ISO是镜像文件:所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例 ...
- jsp有关resquest与session和application的区别和相似性
1. request 的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过 getAttribute方法根据属性获 ...
- ZigZag Conversion [LeetCode]
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- 20145236 《Java程序设计》第7周学习总结
20145236 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 认识时间与日期 时间的度量 格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点 ...
- Jquery操作select小结
每次操作select都要查资料,干脆总结一下. 为select设置placeholder <select class="form-control selOP" placeho ...
- C#学习笔记思维导图 一本书22张图
阅读的书是<21天学通C#>博客中有下载 看看总结之后的模块 全部文件 初步展示 数据存储 继承模块 暂时就这些吧 全部思维导图22张打包下载