题意:要求在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. OpenGL概述

    简介 状态机 glBegin()与glEnd() glFlush()与glFinish() OpenGL简介 OpenGL是图形硬件的一种软件接口.它被设计为硬件独立的接口,可用于多种不同硬件平台.O ...

  2. The Run-Time Constant Pool The Constant Pool

    http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4 http://docs.oracle.com/javase ...

  3. 使用Python玩转WMI

    最近在网上搜索Python和WMI相关资料时,发现大部分文章都千篇一律,并且基本上只说了很基础的使用,并未深入说明如何使用WMI.本文打算更进一步,让我们使用Python玩转WMI. 1 什么是WMI ...

  4. Java 开发必会的 Linux 命令

    作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器上都是Linux系统.所以,要和服 ...

  5. Apache Httpd + Subversion 搭建HTTP访问的SVN服务器

    最近要搭建一个SVN服务器.简单安装之后,本地访问没有问题,但作为服务器肯定是需要HTTP访问.搜索之后,以下是我按照网上的资料搭建的过程,以备后用和参考.(所有软件安装步骤略,没有特殊的,如果没有特 ...

  6. .netGDI+(转)

    架上图片了你就可以在画板上涂改了啊我要写多几个字上去 string str = "Baidu"; //写什么字? Font font = Font("宋体",3 ...

  7. union select

    union select 联合查询 ,即合并(取交集,结果中没有重复行)前后两个查询:前提是前后查询视图必须拥有相同数量的列,列也必需拥有相同的数据类型. union all select 则取的是两 ...

  8. 今年几个项目中用到的一个jqueryTab插件感觉挺好用的

    名字叫:wdscrolltab 开源中国项目地址: http://www.oschina.net/p/wdscrolltab

  9. JS-改变页面的颜色(一)

    需求:点击页面的按钮,改变页面的颜色 思路:一先画出最简单的页面,二想办法获取页面的body节点,三想办法修改body节点的背景颜色属性,四通过一个方法获取随机的颜色值 简单的代码片段如下所示: &l ...

  10. iperf3实践

    The basic commands are the same for iperf and iperf3: SAMPLE IPERF/IPERF3 COMMANDS Server: iperf/ipe ...