Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They…
Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改变后的a继续回答上面的问题.你需要编一个这样的程序…
[题目分析] 上次用树状数组套主席树做的,这次用整体二分去水. 把所有的查询的结果一起进行二分,思路很好. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <set> #include <map> #include <string> #include <algorithm> #inclu…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9094  Solved: 3808[Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1 ],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改 变后的a继续回答上面的问题.…
今天学习了一个奇技淫巧--整体二分.关于整体二分的一些理论性的东西,可以参见XRH的<浅谈数据结构题的几个非经典解法>.然后下面是一些个人的心得体会吧,写下来希望加深一下自己的理解,或者如果有人看了或许也有些帮助. ZOJ2112是一道典型的带修改的区间第k大的问题,有一些树套树等的数据结构可以在线处理这样的问题.但是当题目并不要求在线处理的时候,其实我们可以选择一下整体二分的思想. 个人对整体二分的理解是这样子的,首先对于修改,即把a[xi]=yi(1<=yi<=C)的时候,我们…
题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$CDQ$分治一样,用结构体记录操作的位置,修改的权值等 假设为需要处理的询问分配了一个答案$mid$ 查询区间第$K$小,我们只需要查询区间内权值为$[l,mid]$的数有几个 每次插入/删除,都看这次操作修改的权值是否$\in[l,mid]$ 如果是,说明这个它对答案有贡献,在它在原序列的位置上$+…
正解:整体二分 解题报告: 传送门$w$ 阿查询带修区间第$k$小不显然整体二分板子呗,,, 就考虑先按时间戳排序(,,,其实并不需要读入的时候就按着时间戳排的鸭$QwQ$ 每次二分出$mid$先把所有修改值小于等于$mid$的计入进去就成 查询的时候用值域线段树就成. 其实感觉和板子差不多,,,?而且修改还从区间变成单点了$QwQ$ $over$ #include<bits/stdc++.h> using namespace std; #define il inline #define gc…
题目链接 BZOJ 洛谷 (以下是口胡) 对于多组的询问.修改,我们可以发现: 假设有对p1,p2,p3...的询问,在这之前有对p0的修改(比如+1),且p0<=p1,p2,p3...,那么我们可以在修改完p0后对p1,p2,p3...这些询问更改(比如需求-1),以后对于p1,p2,p3...都不需要管这个修改了. 这样每次需要操作的序列长度只与当前区间有关. 而这个p0我们通过二分确定.不断根据p0将操作划分为两部分(两个队列),当二分到底时(l==r),队列里所有询问的答案就是l了. 复…
和整体二分的模板相比,多了修改操作. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10,INF=1e9; 4 int n,m,t,c[N],ans[N],b[N]; 5 struct node{ 6 int op,x,y,z; 7 }q[N*3],rq[N*3],lq[N*3]; 8 9 void change(int x,int y){ 10 for(;x<=n;x+=x&(-x)) c[…
动态区间询问kth,单点修改. 区间用线段树分解,线段树上每条线段存一颗平衡树. 不能直接得到kth,但是利用val和比val小的个数之间的单调性,二分值.log^3N. 修改则是一次logN*logN. 总体是Nlog^2N+Mlog^3N. 一个值可以对应多个名次.每次查询严格小于val的个数. 把之前的Treap的值域加了一个vs表示值的出现次数,这样就可以支持重复的val了,并可以统计出值出现次数. 这样每个值的名次就变成一个区间了. 复杂度更低的做法:树状数组套主席树,还不太会. #i…