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 ...
随机推荐
- vijos 1448 校门外的树 (不是05年普及组那题)
描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:K=1,K=1,读入l.r表 ...
- winhex与磁盘格式与 数据恢复
第一阶段: 熟悉WinHex的使用. n 熟悉磁盘工具的使用. n 利用WinHex查看物理磁盘和逻辑磁盘. n 了解WinHex中相关工具的用法. 以管理员身份运行winhex(以便之后修改) 上方 ...
- BOM函数之history对象
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- 使用JAVA抓取网页数据
一.使用 HttpClient 抓取网页数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
- 开发工具IDEA环境安装配置
开发工具IDEA环境安装配置 该工具和eclipse类似,但是使用感受确实比eclipse好,越来越多人开始使用IDEA了. 下载地址如下 : https://www.jetbrains.com/id ...
- docker-compose volumes指令路径映射问题
背景:最近在自学docker容器知识,在跟着<Docker - 从入门到实践>进行 docker-compose 搭建django/postgreSQL 实例.在搭建过程中由于自己操作失误 ...
- 一篇关于BEM命名规范
一直以来自己对命名都是比较混乱的,并没有一个比较好的格式来命名,最近自己碰巧学习到了BEM命名规范,我想谈谈自己的理解以供自己来学习,同时也可以和各位大佬一起学习. BEM是一个很有用的方法可以创建复 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 数据结构( Pyhon 语言描述 ) — —第11章:集和字典
使用集 集是没有特定顺序的项的一个集合,集中的项中唯一的 集上可以执行的操作 返回集中项的数目 测试集是否为空 向集中添加一项 从集中删除一项 测试给定的项是否在集中 获取两个集的并集 获取两个集的交 ...
- 我的Python分析成长之路4
一.函数 1.什么是函数?:函数是带名字的代码块,调用函数,只要调用函数名就可以. 2.函数的性质:1.减少重复代码 2.使程序变得可扩展 3.使程序变得易维护 3.编程范示: 1.面向对象编程 ...