题意

动态区间第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 ;
}

最新文章

  1. 解决一则enq: TX – row lock contention的性能故障
  2. JavaScriptSerializer使用条件
  3. Android学习---SQLite数据库的增删改查和事务(transaction)调用
  4. Linux服务器管理: RPM包
  5. 一份高级Java招聘要求
  6. UIScrollView和UIPageController
  7. C语言常用的库文件(头文件、函数库)
  8. Apache 隐藏入口文件 index.php
  9. solr研磨之facet
  10. nsqlookupd.go
  11. RAM和ROM
  12. Mybatis的SqlSession运行原理
  13. 深度学习python的配置(Windows)
  14. [转]bootstrapValidator.js 做表单验证
  15. python +百度语音识别+图灵对话
  16. 5个适用于初学者的有用数据分析表达式(DAX)函数
  17. iOS指令集
  18. C# WPF xml序列化 反序列化
  19. 【BZOJ1489】[HNOI2009]双递增序列(动态规划)
  20. 【MyBatis】MyBatis之分页

热门文章

  1. 新手村,学会做人选数 https://www.luogu.org/problemnew/show/P1036
  2. 页面的URL分析----window.location.href
  3. (转载)详解7.0带来的新工具类:DiffUtil
  4. shell-3.bash的基本功能: history tab alias 快捷键
  5. 路飞学城Python-Day11
  6. BZOJ 4472 [Jsoi2015]salesman(树形DP)
  7. Linux 添加挂载硬盘(包含挂载大于2T以上硬盘)
  8. python __future__ 的几种特性
  9. spring 、Mybatis配置sql server数据库
  10. 可替代google的各种搜索引擎