题意:带修改的第K大

#include<cstdio>
#include<iostream>
#include<cstring>
#define N 400010
#define inf 1000000000
using namespace std;
int a[N],ans[N],sum[N],tmp[N],n,m,num,cnt;
struct node{
int x,y,s,k,tp,cur;
};node q[N],q1[N],q2[N];
void modify(int x,int v){
while(x<=n){
sum[x]+=v;
x+=x&(-x);
}
}
int query(int x){
int tot=;
while(x){
tot+=sum[x];
x-=x&(-x);
}
return tot;
}
void solve(int head,int tail,int l,int r){
if(head>tail)return;
if(l==r){
for(int i=head;i<=tail;i++)
if(q[i].tp==)ans[q[i].s]=l;
return;
}
int mid=l+r>>;
for(int i=head;i<=tail;i++){
if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,);
if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,-);
if(q[i].tp==) tmp[i]=query(q[i].y)-query(q[i].x-);
}
for(int i=head;i<=tail;i++){
if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,-);
if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,);
}
int l1=,l2=;
for(int i=head;i<=tail;i++){
if(q[i].tp==){
if(q[i].cur+tmp[i]>=q[i].k) q1[++l1]=q[i];
else q[i].cur+=tmp[i],q2[++l2]=q[i];
}
else {
if(q[i].y<=mid) q1[++l1]=q[i];
else q2[++l2]=q[i];
}
}
for(int i=;i<=l1;i++) q[head+i-]=q1[i];
for(int i=;i<=l2;i++) q[head+l1+i-]=q2[i];
solve(head,head+l1-,l,mid);
solve(head+l1,tail,mid+,r);
}
void work(){
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
q[++num].x=i;q[num].y=a[i];q[num].tp=;q[num].s=;
}
scanf("%d",&m);
for(int i=;i<=m;i++){
int op;scanf("%d",&op);
if(op==){
int x,y;scanf("%d%d",&x,&y);
q[++num].x=x;q[num].y=a[x];q[num].tp=;q[num].s=;
q[++num].x=x;q[num].y=y;q[num].tp=;q[num].s=;
a[x]=y;
}
else {
int x,y,k;scanf("%d%d%d",&x,&y,&k);
q[++num].x=x;q[num].y=y;q[num].k=k;q[num].tp=;q[num].s=++cnt;
}
}
solve(,num,-inf,inf);
for(int i=;i<=cnt;i++)
printf("%d\n",ans[i]);
}
int main(){
while(scanf("%d",&n)!=EOF){
memset(ans,,sizeof(ans));
memset(tmp,,sizeof(tmp));
memset(sum,,sizeof(sum));
memset(q,,sizeof(q));
num=cnt=;
work();
}
return ;
}

Dynamic Rankings(zoj 2112)的更多相关文章

  1. Dynamic Rankings(整体二分)

    Dynamic Rankings(整体二分) 带修区间第k小.\(n,q\le 10^4\). 这次我们旧瓶装新酒,不用带修主席树.我们用整体二分!整体二分是啥东西呢? 二分答案可以解决一次询问的问题 ...

  2. Luogu P2617 Dynamic Rankings(整体二分)

    题目 动态区间第K小模板题. 一个非常可行的办法是BIT套动态开点权值SegTree,但是它跑的实在太慢了. 然后由于这题并没有强制在线,所以我们可以使用整体二分来吊打树套树. 当然如果强制在线的话就 ...

  3. [Luogu2617]Dynamic Rankings(整体二分)

    Luogu 动态区间第K大的整体二分解法 之前学主席树的时候就做了这道题(明明是树套树不是主席树啊),码量挺大而且调了我一个晚上.换成整体二分我半个小时就写完了而且一A. 写起来就是爽. 其实原理很简 ...

  4. luogu P2617 Dynamic Rankings(主席树)

    嘟嘟嘟 一句话题意:带修改区间第\(k\)小. 不修改都会,主席树板子.但是有修改就要比较深入的理解主席树了. 众所周知,主席树中以\(i\)为根的线段树维护的是\([1, i]\)这个前缀的权值,因 ...

  5. acwing1782 Dynamic Rankings (整体二分)

    和整体二分的模板相比,多了修改操作. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10,INF=1 ...

  6. Dynamic Rankings(树状数组套权值线段树)

    Dynamic Rankings(树状数组套权值线段树) 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[ ...

  7. POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配

    两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...

  8. ZOJ 2112 Dynamic Rankings(主席树の动态kth)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 The Company Dynamic Rankings ...

  9. ZOJ 2112 Dynamic Rankings(动态区间第 k 大+块状链表)

    题目大意 给定一个数列,编号从 1 到 n,现在有 m 个操作,操作分两类: 1. 修改数列中某个位置的数的值为 val 2. 询问 [L, R] 这个区间中第 k 大的是多少 n<=50,00 ...

随机推荐

  1. 如何在Kubernetes里创建一个Nginx service

    Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...

  2. 汇编segment

    一个正常的应用程序被由若干个 segment组成. 定义 segment: SECTION .段名 SECTION 也可以小写 如: 定义数据段: section .data   定义代码段: sec ...

  3. 获取url请求的参数值

    function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '( ...

  4. activiti整合开发实例总结

    参考手册:http://www.mossle.com/docs/activiti/ 一.applicationContext.xml中引入activiti相关配置的xml文件 <!-- begi ...

  5. shell脚本,awk合并一列的问题。

    文件 file2内容如下:0 qwert1 asdfghjk2 asdjkl2 zxcvbn3 dfghjkll4 222224 tyuiop4 bnm 让第一列相等的合并成一行,不要第一列,也就是变 ...

  6. shell脚本,批量创建10个系统帐号并设置密码为随机8位字符串。

    [root@localhost wyb]# cat user10.sh #!/bin/bash #批量创建10个系统帐号wangyb01-wangyb10并设置密码(密码为随机8位字符串). > ...

  7. javase(11)_juc并发库

    一.传统线程技术 public static void main(String[] args) { Thread thread = new Thread(){ @Override public voi ...

  8. 带你进入Angular js的大门

    首先需要指出什么是angular js,其实说白了angular js就是Javascript的一个类库,我们使用这个类库可以很容易的创建web页面.双向绑定是angular js其中的一个重要特征, ...

  9. 【求助】NdisSend,自定义数据包发送失败?

    做ndis hook的时候,自定义了一个数据包,包结构应该没有问题,填充NDIS_PACKET结构是这样的,先初始化:        NdisAllocatePacketPool(&nStat ...

  10. vue 点击倒计时 ajax 封装

    方法:function(){ var that = this; if (that.time == 0) { that.disabled = false; that.text ="点击获取&q ...