【Tyvj1601】魔兽争霸(主席树,树套树)
题意:要求在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】魔兽争霸(主席树,树套树)的更多相关文章
- 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)
洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...
- [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】
题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...
- 【bzoj1901】dynamic ranking(带修改主席树/树套树)
题面地址(权限题) 不用权限题的地址 首先说说怎么搞带修改主席树? 回忆一般的kth问题,我们的主席树求的是前缀和,这样我们在目标区间的左右端点的主席树差分下就能求出kth. 那么我们如何支持修改操作 ...
- ZOJ - 2112 主席树套树状数组
题意:动态第k大,可单点更新,操作+原数组范围6e4 年轻人的第一道纯手工树套树 静态第k大可以很轻易的用权值主席树作差而得 而动态第k大由于修改第i个数会影响[i...n]棵树,因此我们不能在原主席 ...
- [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...
- BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序
Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...
- zoj2112 Dynamic Rankings (主席树 || 树套树)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间 ...
- 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 ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
随机推荐
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- DWORD类型的IP地址转换为CString字符串
从ip地址控件获得的ip地址是DWORD类型的 用MessageBox怎样将ip地址显示出来呢? DWORD类型32位,每4位为一组代表常见的IP地址,即***.***.***.***. 采用HIWO ...
- 切换到android studio环境
下载: android-studio-bundle-135.1740770-windows.exe sysimg_arm-21_r03.zip 设置环境变量: ANDROID_SDK_HOME ...
- 在Ext JS 6中添加本地化包
我在官方论坛发的帖子终于有人恢复了,也终于知道如何添加本地化包了.在Ext JS 6中,Ext JS属于经典工具包,而本地化是包含在经典工具包中,因而在app.json中,要添加本地化包,必须在cla ...
- Reflector 反编译 .NET文件后修复
反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...
- js滚动效果-(up,left)
// JavaScript Document //图片横向滚动// 2012-1-12 zhx 改版 改为调用方法 调用参数为元素名称 //name 控件名称 //direction 滚动方向 暂时支 ...
- 文件hash数据库
unit YxdDB; interface uses Windows, Classes, SysUtils, SyncObjs; type TYXDDBValue = packed record Si ...
- 2015年10月TIOBE编程语言排行榜
名副其实的月经贴.
- python---Memcached
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...