zoj2112
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj using namespace std; typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP; #define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b) for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k)) template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;} const DB EPS=1e-;
inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
const DB Pi=acos(-1.0); inline int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
}
inline LL gll()
{
LL res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const int maxN=;
const int maxM=;
const int maxcnt=maxN+maxM; int N,M;
int a[maxN+];
struct Tdata
{
char type;
int l,r,k,t;
inline void input()
{
type=getchar();while(!(type=='C' || type=='Q'))type=getchar();
if(type=='Q'){l=gint();r=gint();k=gint();}else{l=gint();t=gint();}
}
}data[maxM+]; int bak[maxcnt+],cnt; struct Tnode{int son[],val;}sn[maxcnt*+];int idx;
int tree[maxN+]; inline int newnode(){++idx;sn[idx].son[]=sn[idx].son[]=sn[idx].val=;return idx;}
inline void update(int p,int l,int r,int x,int val)
{
while()
{
sn[p].val+=val;
if(l==r)break;
int mid=(l+r)/;
int f=(x>mid);
if(!sn[p].son[f])sn[p].son[f]=newnode();
if(x<=mid){p=sn[p].son[];r=mid;}else{p=sn[p].son[];l=mid+;}
}
} #define lowbit(a) (a&(-a))
inline void change(int a,int x,int val)
{
for(;a<=N;a+=lowbit(a))
update(tree[a],,cnt,x,val);
} int lge,larr[maxN+],rge,rarr[maxN+];
inline int ask(int l,int r,int k)
{
int i;
l--;
lge=;
for(;l>=;l-=lowbit(l))larr[++lge]=tree[l];
rge=;
for(;r>=;r-=lowbit(r))rarr[++rge]=tree[r];
int x=,y=cnt;
while()
{
if(x==y)return bak[x];
int mid=(x+y)/,G=;
re(i,,rge)G+=sn[sn[rarr[i]].son[]].val;
re(i,,lge)G-=sn[sn[larr[i]].son[]].val;
if(G<k)
{
k-=G;
x=mid+;
re(i,,rge)rarr[i]=sn[rarr[i]].son[];
re(i,,lge)larr[i]=sn[larr[i]].son[];
}
else
{
y=mid;
re(i,,rge)rarr[i]=sn[rarr[i]].son[];
re(i,,lge)larr[i]=sn[larr[i]].son[];
}
}
} int main()
{
freopen("zoj2112.in","r",stdin);
freopen("zoj2112.out","w",stdout);
int i;
for(int Case=gint();Case;Case--)
{
N=gint();M=gint();
re(i,,N)a[i]=gint();
re(i,,M)data[i].input();
cnt=;
re(i,,N)bak[++cnt]=a[i];
re(i,,M)if(data[i].type=='C')bak[++cnt]=data[i].t;
sort(bak+,bak+cnt+);
cnt=unique(bak+,bak+cnt+)-bak-;
re(i,,N)a[i]=lower_bound(bak+,bak+cnt+,a[i])-bak;
re(i,,M)if(data[i].type=='C')data[i].t=lower_bound(bak+,bak+cnt+,data[i].t)-bak;
idx=;
re(i,,N)tree[i]=newnode();
re(i,,N)change(i,a[i],);
re(i,,M)
{
int x;
switch(data[i].type)
{
case 'C':
x=data[i].l;
change(x,a[x],-);
a[x]=data[i].t;
change(x,a[x],);
break;
case 'Q':
printf("%d\n",ask(data[i].l,data[i].r,data[i].k));
break;
}
}
}
return ;
}
zoj2112的更多相关文章
- zoj2112 树状数组+主席树 区间动第k大
Dynamic Rankings Time Limit: 10000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Subm ...
- bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统)
bzoj1901&zoj2112&cogs257 Dynamic Rankings(动态排名系统) cogs zoj bzoj-权限 题解 bzoj和zoj都是骗访问量的233,我没有 ...
- ZOJ2112 Dynamic Rankings(整体二分)
今天学习了一个奇技淫巧--整体二分.关于整体二分的一些理论性的东西,可以参见XRH的<浅谈数据结构题的几个非经典解法>.然后下面是一些个人的心得体会吧,写下来希望加深一下自己的理解,或者如 ...
- zoj2112 主席树动态第k大 (主席树&&树状数组)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- BZOJ1901 ZOJ2112 线段树+treap (线段树套线段树)
BZOJ1901: 线段树套线段树做法: (外层线段树 里层动态开节点的权值线段树) 有一个小小的trick 可以省掉二分变成nlog^2n的 就是把查询的区间都取出来- logn个一起走- 2016 ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- [主席树]ZOJ2112 && BZOJ1901 Dynamic Rankings
题意:n个数,q个询问 (n<=50000, q<=10000) Q x y z 代表询问[x, y]区间里的第z小的数 C x y 代表将(从左往右数)第x个数变成y 上篇介绍了在 ...
- ZOJ2112 Dynamic Rankings 动态区间第K最值 平方分割
有了上一题的经验(POJ的静态区间第K最值)再解决这道题就轻松多了 空间5256KB,时间3330ms,如果把动态开点的平衡树换成数组模拟的话应该会更快 之所以选择了平方分割而不是树套树,不仅是所谓趁 ...
- 【ZOJ2112】【整体二分+树状数组】带修改区间第k大
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
随机推荐
- libvirtsAPI
mongodb远程服务器连接 mongo -uroot -p321 master.puppet.org:27017/admin
- IOS 判断设备屏幕尺寸、分辨率
根据屏幕尺寸和分辨率,ios现在数起来有6个版本. iOS 设备现有的分辨率如下: iPhone/iPod Touch 普通屏 320像素 x 480像素 iPhone .3G.3GS,iPod To ...
- oracle递归函数
oracle start with connect by 使用方法 oracle中 connect by prior 递归算法 Oracle中start with...connect by prio ...
- python数据库做成邮箱的注册系统!
#! /usr/bin/env python2.7 # -*- coding:utf-8 -*- #File:w7.py #Date:2013-7-18 #Author:wangyu import r ...
- Linux安装mysql源码
1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件 (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ rhel5 ...
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
1.UITapGestureRecognizer 点击/双击手势 代码如下: var tapGesture = UITapGestureRecognizer(target: self, action: ...
- Java初转型-Maven入门
原系列名:Maven学习总结(一) 原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3498271.html 感谢! 一.Maven的基本概念 Maven(翻译为&q ...
- OpenSuse下编译MonoDevelop
当访问Monodevelop.com官网下载的安装包,安装后,发现并不是最新版.在OpenSuse下载的是3.0版本.根据官网的指示,可以自己下载源码进行编译.按官网的指引: 1. $ git clo ...
- WdatePicker 设置今天起 后30天可选
<link href="{:ADDON_PUBLIC_PATH}/style/My97DatePicker/skin/WdatePicker.css" rel="s ...
- js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法
今天在学习js中的数组时,遇到的输出一个数组中最大.最小值以及它们的下表,以下是自己的解决方法! <script type="text/javascript"> var ...