题意

动态区间第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(整体二分)的更多相关文章

  1. HDU - 5412 CRB and Queries (整体二分)

    题目链接 动态区间第k小,但是这道题的话用主席树+树状数组套线段树的空间复杂度是O(nlog2n)会爆掉. 另一种替代的方法是用树状数组套平衡树,空间复杂度降到了O(nlogn),但我感觉平衡树是个挺 ...

  2. hdu 5412 CRB and Queries

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5412 CRB and Queries Description There are $N$ boys i ...

  3. Hdu CRB and Queries(整体二分)

    CRB and Queries Time Limit: 6000 MS Memory Limit: 131072 K Problem Description There are N boys in C ...

  4. HDU5412 CRB and Queries 整体二分

    传送门 刚觉得最近写代码比较顺畅没什么Bug,cdq分治真是我的一个噩梦.. 整体二分模板题,带修改的区间第k小. vjudge不知抽什么风,用不了,hdu忘了密码了一直在那里各种试,难受.. 写得比 ...

  5. HDU 5412——CRB and Queries——————【线段树套Treap(并没有AC)】

    CRB and Queries Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  6. 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 ...

  7. 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 ...

  8. HDU 5412 CRB and Queries(区间第K大 树套树 按值建树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5412 Problem Description There are N boys in CodeLan ...

  9. 整体二分 HDU - 5808

    题目大意 有n个物品,排成一个序列,每个物品有一个di表示取到i要走的距离,vi表示i的价值. 给m组询问[l,r] ,c,sum,问由[l,r]的di<=c的物品能否凑出sum的价值(每个物品 ...

随机推荐

  1. 解决django.db.utils.InternalError: (1049, "Unknown database 'exam_db'")

    先检查seeting数据库配置DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'eaxm_db', ' ...

  2. java日期类型与字符串类型的相互转换

    package cn.zwq.convert; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...

  3. 优化长的switch语句

    突然想到之前碰到的一个优化的面试题,现在想想switch用的太傻 public enum FormatType { GetKey, GetValue } public class Format { p ...

  4. Glidar测试安装

    在上一篇随笔中,我们完成了对Glidar 仿真器的概念层面的认识.接下来,我们将着手对该该仿真器进行安装测试. 1 依赖库的安装 安装环境为Windows 7 64位+Ubuntu14.04 LTS的 ...

  5. SSM博客实战(9)-拦截器验证权限和登录与注销的实现

    转载 https://liuyanzhao.com/6300.html

  6. unserialize反序列化错误的解决办法

    1. UTF-8编码解决反序列化出错问题 function mb_unserialize($serial_str) { $serial_str = str_replace("\r" ...

  7. Ubuntu 如何进入系统文件/etc/profile修改内容

    转载:https://blog.csdn.net/cfq1491/article/details/81088117 /etc/profile 默认权限为 -rw-r--r-- 即只有root用户可以修 ...

  8. LINUX 中 python 版本升级

    首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: 1 # wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tg ...

  9. solr启动时报错org.apache.solr.common.SolrException: undefined field text的解决办法

    solr启动时报错org.apache.solr.common.SolrException: undefined field text的解决办法 原创 2015年08月21日 20:47:40 标签: ...

  10. 泛泰 A850 4.1.2 刷第三方专用Recovery合集

    下载 http://download.csdn.net/detail/benjaminwan/7406089 专用于刷基于AOSP4.1.2的乐蛙和MIUIV5 由于本人制作的第三方ROM,为了通刷, ...