题意:要求在N个数的序列中支持以下操作:

1:将第X个元素加上Y

2:询问当前K大值

n<=30000,m<=50000

思路:树状数组套主席树

Tyvj又炸了,还不知道对不对

 var t:array[..12]of record
l,r,s:longint;
end;
d:array[..,..]of longint;
a,save,q,root,hash:array[..]of longint;
b:array[..]of longint;
n,m,i,j,x,cnt,u,que,s,sum,tmp,len:longint;
ch:string; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; procedure update(l,r:longint;var p:longint;x,v:longint);
var mid:longint;
begin
inc(cnt); t[cnt]:=t[p];
p:=cnt; t[p].s:=t[p].s+v;
if l=r then exit;
mid:=(l+r)>>;
if x<=mid then update(l,mid,t[p].l,x,v)
else update(mid+,r,t[p].r,x,v);
end; function query(l,r,k:longint):longint;
var mid,s,i:longint;
begin
if l=r then exit(l);
s:=;
mid:=(l+r)>>;
for i:= to len do s:=s+t[t[q[i]].l].s;
if s>=k then
begin
for i:= to len do q[i]:=t[q[i]].l;
exit(query(l,mid,k));
end
else
begin
for i:= to len do q[i]:=t[q[i]].r;
exit(query(mid+,r,k-s));
end;
end; procedure swap(var x,y:longint);
var t:longint;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j,mid:longint;
begin
i:=l; j:=r; mid:=b[(l+r)>>];
repeat
while mid<b[i] do inc(i);
while mid>b[j] do dec(j);
if i<=j then
begin
swap(b[i],b[j]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; function find(x:longint):longint;
var l,r,mid:longint;
begin
l:=; r:=u;
while l<=r do
begin
mid:=(l+r)>>;
if hash[mid]=x then exit(mid);
if hash[mid]>x then l:=mid+
else r:=mid-;
end;
end; begin
assign(input,'tyvj1601.in'); reset(input);
assign(output,'tyvj1601.out'); rewrite(output);
readln(n);
for i:= to n do
begin
read(a[i]); b[i]:=a[i];
end;
que:=n;
for i:= to n do save[i]:=a[i];
readln(m);
for i:= to m do
begin
readln(ch); x:=;
if ch[]='Q' then
begin
for j:= to length(ch) do x:=x*+ord(ch[j])-ord('');
d[i,]:=; d[i,]:=x; continue;
end;
d[i,]:=; s:=;
for j:= to length(ch) do
begin
if ch[j]=' ' then inc(s)
else d[i,s]:=d[i,s]*+ord(ch[j])-ord('');
end;
if ch[]='A' then d[i,]:=-d[i,];
end;
for i:= to m do
if d[i,]= then
begin
a[d[i,]]:=a[d[i,]]+d[i,];
if a[d[i,]]> then
begin
inc(que); b[que]:=a[d[i,]];
end;
end;
qsort(,que);
hash[]:=b[]; u:=;
for i:= to que do
if b[i]<>b[i-] then begin inc(u); hash[u]:=b[i]; end;
sum:=n;
for i:= to n do
begin
tmp:=find(save[i]);
j:=i;
while j<=n do
begin
update(,u,root[j],tmp,);
j:=j+lowbit(j);
end;
end;
for i:= to m do
if d[i,]= then
begin
len:=; j:=n;
while j> do
begin
inc(len); q[len]:=root[j];
j:=j-lowbit(j);
end;
if sum<d[i,] then writeln(-)
else writeln(hash[query(,u,d[i,])]);
end
else
begin
tmp:=find(save[d[i,]]);
j:=d[i,];
while j<=n do
begin
update(,u,root[j],tmp,-);
j:=j+lowbit(j);
end;
save[d[i,]]:=save[d[i,]]+d[i,];
if save[d[i,]]> then
begin
tmp:=find(save[d[i,]]);
j:=d[i,];
while j<=n do
begin
update(,u,root[j],tmp,);
j:=j+lowbit(j);
end;
end
else dec(sum);
end; writeln(sum);
close(input);
close(output);
end.

【Tyvj1601】魔兽争霸(主席树,树套树)的更多相关文章

  1. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

  2. [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】

    题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...

  3. 【bzoj1901】dynamic ranking(带修改主席树/树套树)

    题面地址(权限题) 不用权限题的地址 首先说说怎么搞带修改主席树? 回忆一般的kth问题,我们的主席树求的是前缀和,这样我们在目标区间的左右端点的主席树差分下就能求出kth. 那么我们如何支持修改操作 ...

  4. ZOJ - 2112 主席树套树状数组

    题意:动态第k大,可单点更新,操作+原数组范围6e4 年轻人的第一道纯手工树套树 静态第k大可以很轻易的用权值主席树作差而得 而动态第k大由于修改第i个数会影响[i...n]棵树,因此我们不能在原主席 ...

  5. [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树

    二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...

  6. BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序

    Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...

  7. zoj2112 Dynamic Rankings (主席树 || 树套树)

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  8. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间 ...

  9. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  10. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

随机推荐

  1. SCRUM项目 5.0

    5.0--------------------------------------------------- 1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理 ...

  2. ecshop中user.php中的$user说明---user表加字段

    今天想对user表加个字段,打开user.php发现有个$user,其中它有很多方法,像登陆,注册,退出.都要用到它.可找了大半天也找不到这个函数调用的是哪个类.又坚持找了半天,发现$user在ini ...

  3. MVC缓存OutputCacheAttribute 类提高网站效率(转)

    原文转自:http://www.cnblogs.com/iamlilinfeng/p/4419362.html 命名空间:  System.Web.Mvc 程序集:  System.Web.Mvc(在 ...

  4. mfc_随机数生成器

    vc++6.0 内涵图

  5. JAVA虚拟机垃圾回收算法原理

    除了释放不再被引用的对象外,垃圾收集器还要处理堆碎块.新的对象分配了空间,不再被引用的对象被释放,所以堆内存的空闲位置介于活动的对象之间.请求分配新对象时可能不得不增大堆空间的大小,虽然可以使用的总空 ...

  6. 51nod 1471 小S的兴趣 sqrt

    小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题有两种类型: 1.      在数组下标 ...

  7. 在CentOS 7中安装nginx服务器

    简要地介绍一下,如何在CentOS 7中安装nginx服务器  下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/ ...

  8. 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载

    可使用 uptime.top.w 命令来查看. 以 uptime 命令为例: liuqian@ubuntu:~$ uptime 17:31:26 up 7:27, 2 users, load aver ...

  9. U盘安装ubuntu server 12.04的问题检测不到CDROM的解决

    U盘安装ubuntu server 12.04的问题检测不到CDROM的解决 ========================== 我是u盘安装ubuntu 14 64Bit 也是出现同样的问题 用u ...

  10. 学习了一下javascript的模块化编程

    现在在我脑海里关于“模块化”的概念是这些词:简单.具有逻辑之美.易用.健壮.可扩展.似乎这些形容与我现在水平写出的代码有点格格不入啊. 所以今天想了解和简单的实践一下“模块化开发”. 1.首先学习一下 ...