Dynamic Rankings(zoj 2112)
题意:带修改的第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)的更多相关文章
- Dynamic Rankings(整体二分)
Dynamic Rankings(整体二分) 带修区间第k小.\(n,q\le 10^4\). 这次我们旧瓶装新酒,不用带修主席树.我们用整体二分!整体二分是啥东西呢? 二分答案可以解决一次询问的问题 ...
- Luogu P2617 Dynamic Rankings(整体二分)
题目 动态区间第K小模板题. 一个非常可行的办法是BIT套动态开点权值SegTree,但是它跑的实在太慢了. 然后由于这题并没有强制在线,所以我们可以使用整体二分来吊打树套树. 当然如果强制在线的话就 ...
- [Luogu2617]Dynamic Rankings(整体二分)
Luogu 动态区间第K大的整体二分解法 之前学主席树的时候就做了这道题(明明是树套树不是主席树啊),码量挺大而且调了我一个晚上.换成整体二分我半个小时就写完了而且一A. 写起来就是爽. 其实原理很简 ...
- luogu P2617 Dynamic Rankings(主席树)
嘟嘟嘟 一句话题意:带修改区间第\(k\)小. 不修改都会,主席树板子.但是有修改就要比较深入的理解主席树了. 众所周知,主席树中以\(i\)为根的线段树维护的是\([1, i]\)这个前缀的权值,因 ...
- acwing1782 Dynamic Rankings (整体二分)
和整体二分的模板相比,多了修改操作. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10,INF=1 ...
- Dynamic Rankings(树状数组套权值线段树)
Dynamic Rankings(树状数组套权值线段树) 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[ ...
- POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配
两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...
- ZOJ 2112 Dynamic Rankings(主席树の动态kth)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 The Company Dynamic Rankings ...
- ZOJ 2112 Dynamic Rankings(动态区间第 k 大+块状链表)
题目大意 给定一个数列,编号从 1 到 n,现在有 m 个操作,操作分两类: 1. 修改数列中某个位置的数的值为 val 2. 询问 [L, R] 这个区间中第 k 大的是多少 n<=50,00 ...
随机推荐
- mybatis 原理研究
1. mybatis 是使用JDBC来实现的, 所以需要我们首先了解JDBC 的查询 ①加载JDBC驱动 ②建立并获取数据库连接 ③设置sql语句的传递参数 ④执行sql语句并获得结果 ⑤对结果进行转 ...
- MINST手写数字识别(一)—— 全连接网络
这是一个简单快速入门教程——用Keras搭建神经网络实现手写数字识别,它大部分基于Keras的源代码示例 minst_mlp.py. 1.安装依赖库 首先,你需要安装最近版本的Python,再加上一些 ...
- vue 数组更新 this.$set(this.dataList, data.index, data.data)
vue 数组更新 this.$set(this.dataList, data.index, data.data) https://www.cnblogs.com/huangenai/p/9836811 ...
- 快学UiAutomator新建第一个测试工程
1.打开Eclipse 2.新建一个java项目,包 3.增加build path,加载需要的库文件jar包 4.新建测试类,继承UIAutomatorTestCase 5.编写测试用例,方法名必须t ...
- KeyValuePair的使用
Dictionary<string, string> dc = new Dictionary<string, string>(); 前台页面: <div id=" ...
- Eclipse调试:Run on server 和 Debug on server 区别
Run on server: 以正常模式运行程序.会直接把程序从头到尾执行一遍,运行完就结束,不会进入到源代码里面(即使源代码中设置了断点). Debug on server: 以调试模式运行程序,或 ...
- assign, retain, copy, weak, strong
一.assign, retain, copy 的区别(引用计数 RC reference count) 参考:IOS基础:retain,copy,assign及autorelease 1. 假设你用m ...
- 黑苹果10.10.3手动开启SSD的TIRM提高硬盘效率
黑苹果10.10.3手动开启SSD的TIRM提高硬盘效率 文章前言 其实开启TIRM的方法有很多,比如用Clover注入的方式或者用其他的工具来方便完成,但是10.10.3刚刚出来有些工具还没有更新的 ...
- 【动态规划】poj2353Ministry
拓扑序……好些玄妙 Description Mr. F. wants to get a document be signed by a minister. A minister signs a doc ...
- ECshop二次开发 ECSHOP首页显示积分商城里的商品
以ECSHOP2.7.2官方默认模板为基础 1).首先打开 index.php 文件,在最末尾增加下面函数,注意千万不要写到 “?>” 的外面去,要加在“?>”的前面,加以下代码: /** ...