hdu 5412 CRB and Queries(整体二分)
题意
动态区间第k大
(n<=100000,m<=100000)
题解
整体二分的应用。
与静态相比差别不是很大。(和CDQ还有点像)所以直接上代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
struct query{
int x,y,type,k,w;
}q[N],c1[N],c2[N];
int n,m,ans[N],tr[N],mx,tot,cnt,a[N];
int lowbit(int x){
return x&-x;
}
void add(int x,int w){
for(int i=x;i<=n;i+=lowbit(i)){
tr[i]+=w;
}
}
int getsum(int x){
int ans=;
for(int i=x;i;i-=lowbit(i)){
ans+=tr[i];
}
return ans;
}
void solve(int l,int r,int L,int R){
if(l>r)return;
if(L==R){
for(int i=l;i<=r;i++){
if(q[i].type==)ans[q[i].w]=L;
}
return ;
}
int mid=(L+R)>>;
int lnow=;int rnow=;
for(int i=l;i<=r;i++){
if(q[i].type==){
int tmp=getsum(q[i].y)-getsum(q[i].x-);
if(tmp>=q[i].k){
c1[++lnow]=q[i];
}
else{
q[i].k-=tmp;
c2[++rnow]=q[i];
}
}
else{
if(q[i].type==&&q[i].y<=mid)add(q[i].x,);
if(q[i].type==&&q[i].y<=mid)add(q[i].x,-);
if(q[i].y<=mid)c1[++lnow]=q[i];
else c2[++rnow]=q[i];
}
}
for(int i=l;i<=r;i++){
if(q[i].type==&&q[i].y<=mid)add(q[i].x,-);
if(q[i].type==&&q[i].y<=mid)add(q[i].x,);
}
for(int i=;i<=lnow;i++){
q[l+i-]=c1[i];
}
for(int i=;i<=rnow;i++){
q[l+lnow+i-]=c2[i];
}
solve(l,l+lnow-,L,mid);
solve(l+lnow,r,mid+,R);
}
int main(){
while(~scanf("%d",&n)){
mx=;cnt=;tot=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
q[++cnt].type=;q[cnt].x=i;q[cnt].y=a[i];
mx=max(mx,a[i]);
}
scanf("%d",&m);
for(int i=;i<=m;i++){
int k;
scanf("%d",&k);
if(k==){
int x,y;
scanf("%d%d",&x,&y);
q[++cnt].type=;q[cnt].x=x;q[cnt].y=a[x];
q[++cnt].type=;q[cnt].x=x;q[cnt].y=y;
a[x]=y;
mx=max(mx,y);
}
else{
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
q[++cnt].type=;q[cnt].x=x;q[cnt].y=y;q[cnt].k=k;
q[cnt].w=++tot;
}
}
solve(,cnt,,mx);
for(int i=;i<=tot;i++){
printf("%d\n",ans[i]);
}
}
return ;
}
hdu 5412 CRB and Queries(整体二分)的更多相关文章
- HDU - 5412 CRB and Queries (整体二分)
题目链接 动态区间第k小,但是这道题的话用主席树+树状数组套线段树的空间复杂度是O(nlog2n)会爆掉. 另一种替代的方法是用树状数组套平衡树,空间复杂度降到了O(nlogn),但我感觉平衡树是个挺 ...
- hdu 5412 CRB and Queries
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5412 CRB and Queries Description There are $N$ boys i ...
- Hdu CRB and Queries(整体二分)
CRB and Queries Time Limit: 6000 MS Memory Limit: 131072 K Problem Description There are N boys in C ...
- HDU5412 CRB and Queries 整体二分
传送门 刚觉得最近写代码比较顺畅没什么Bug,cdq分治真是我的一个噩梦.. 整体二分模板题,带修改的区间第k小. vjudge不知抽什么风,用不了,hdu忘了密码了一直在那里各种试,难受.. 写得比 ...
- HDU 5412——CRB and Queries——————【线段树套Treap(并没有AC)】
CRB and Queries Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries
CRB and Queries Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- HDU 5412 CRB and Queries 动态整体二分
Problem Description There are N boys in CodeLand.Boy i has his coding skill Ai.CRB wants to know who ...
- HDU 5412 CRB and Queries(区间第K大 树套树 按值建树)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5412 Problem Description There are N boys in CodeLan ...
- 整体二分 HDU - 5808
题目大意 有n个物品,排成一个序列,每个物品有一个di表示取到i要走的距离,vi表示i的价值. 给m组询问[l,r] ,c,sum,问由[l,r]的di<=c的物品能否凑出sum的价值(每个物品 ...
随机推荐
- 132.try throw catch介绍
#include <iostream> using namespace std; //try尝试执行,抛出throw,throw之后语句不再执行 //catch处理throw的异常 voi ...
- Codeforces 659F Polycarp and Hay 并查集
链接 Codeforces 659F Polycarp and Hay 题意 一个矩阵,减小一些数字的大小使得构成一个连通块的和恰好等于k,要求连通块中至少保持一个不变 思路 将数值从小到大排序,按顺 ...
- Windows窗体应用布局详解
上回我们已经会用基本的控件创建Windows窗体应用,这才我们再来认识一些高级控件并使用ADO.NET技术连接数据库来创建功能更坚强大的窗体应用! 菜单栏控件MenuStrip .NET中提供了一个M ...
- python 3.x 学习笔记12 (反射 and 异常)
1.反射通过字符串映射或修改程序运行时的状态.属性.方法 getattr(obj,name_str): 根据字符串name_str去获取obj对象里的对应的方法的内存地址 hasttr(obj,na ...
- Android ViewPager系列之ViewPager一屏显示多个子页面
ViewPager一屏显示多个子页面,常见的有两种形式: 1.当前展示的页面右侧显示一部分下个页面的内容 2.当前页面居中,左右两边分别显示上一个页面.下一个页面 第 1 种表现形式的实现代码 其实这 ...
- 51nod 1101 换零钱 完全背包的变型 动态规划
题目: 思路: ;i < ; i++){ for(int j = a[i];j <= n; j++){ dp[j] = (dp[j] + dp[j-a[i]])%mod; } } a[i] ...
- 1112 KGold
给出N个人在0时刻的财富值M[i](所有人在0时刻的财富互不相等),以及财富增长速度S[i],随着时间的推移,某些人的财富值会超越另外一些人.如果时间足够长,对于财富增长最快的人来说,他的财富将超越所 ...
- sftp权限
用户: t1 t2 根目录: /home/data/ /home/data/t1/ drwxr-xr-x. 2 t1 t1 4096 Mar 24 17:26 t1 /home/data/t2/ dr ...
- 洛谷 P1983 车站分级 拓扑排序
Code: #include<cstdio> #include<queue> #include<algorithm> #include<cstring> ...
- PHP SOAP 教程
一.SoapServer 服务器 1.__construct 作用:创建 SoapServer 对象 用法:__construct ( mixed wsdl [, array options] ) 参 ...