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 ...
随机推荐
- 通用 PE 工具箱1.9.6(XP内核)by Uepon(李培聪)
通用 PE 工具箱1.9.6(XP内核)by Uepon(李培聪)官网:http://hi.baidu.com/uepon?page=21.8版论坛帖子:http://bbs.wuyou.net/fo ...
- VC++时间函数总结
目录 第1章基本概念 1 1.1 基本概念 1 1.2 时间表示法 2 第2章 Win32 API 3 2.1 获取 3 2.1.1 时间间隔 3 2.1.2 时刻 ...
- C# Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.C#语言从一开始就是为了互联网而设计的,它为实现程 ...
- IE9以上 CSS文件因Mime类型不匹配而被忽略 其他浏览器及IE8以下显示正常
什么是Mime类型? MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名 ...
- Qt之加载QSS文件
简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QA ...
- 使用git上传项目
1. 安装Git 2. 安装TortoiseGit 3.任意文件夹选择「TortoiseGit」>「settings」,打开如下界面. 3. 生成SSH公钥 3.1运行Git Bash,如下命令 ...
- struts2视频学习笔记 18(自定义拦截器)
课时18 自定义拦截 因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defa ...
- php中PCRE正则表达式分隔符的使用
转自:http://www.baiwar.com/post/the-use-of-php-pcre-regex-delimiter.html 在php5.3.0以前,PHP可使用两套正则表达式规则,一 ...
- BZOJ3888 [Usaco2015 Jan]Stampede
我们只要把每头牛开始遮挡视线和结束遮挡视线的时间点都搞出来就好= = 再按照y轴排序...然后变成线段覆盖了..线段树搞一下就好了? /******************************** ...
- java邮件
我们用过很多邮件,qq,163,网易等. 一.发送邮件需要遵循smtp协议,接收邮件需要遵循pop3协议 二.发邮件的过程 假设用qq邮件 写邮件-->点 “发送” --> qq邮件服务器 ...