bzoj3295
没什么好说的,树套树应该随便搞
我在128MB空间下大胆的写了主席树
当然要把原树和修改树分开来建
没有然后了
type node=record
l,r,s:longint;
end; var tree:array[..] of node;
c:array[..] of int64;
h,ph,a,b,d1,d2:array[..] of longint;
dd1,dd2:array[..,..] of longint;
d,t1,t2,i,x,y,n,m,t:longint;
ans:int64; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; procedure add(x:longint);
begin
while x<=n do
begin
c[x]:=c[x]+;
x:=x+lowbit(x);
end;
end; function get(x:longint):int64;
begin
get:=;
while x> do
begin
get:=get+c[x];
x:=x-lowbit(x);
end;
end; procedure update(i:longint);
begin
tree[i].s:=tree[tree[i].l].s+tree[tree[i].r].s;
end; function build(l,r:longint):longint;
var m,q:longint;
begin
inc(t);
if l=r then
exit(t)
else begin
m:=(l+r) shr ;
q:=t;
tree[q].l:=build(l,m);
tree[q].r:=build(m+,r);
exit(q);
end;
end; function insert(l,r,last,x,y:longint):longint;
var m,q:longint;
begin
inc(t);
if l=r then
begin
tree[t].s:=tree[last].s+y;
exit(t);
end
else begin
m:=(l+r) shr ;
q:=t;
if x<=m then
begin
tree[q].r:=tree[last].r;
last:=tree[last].l;
tree[q].l:=insert(l,m,last,x,y);
end
else begin
tree[q].l:=tree[last].l;
last:=tree[last].r;
tree[q].r:=insert(m+,r,last,x,y);
end;
update(q);
exit(q);
end;
end; function getans(l,r,x,y:longint):longint;
var m,s,i:longint;
begin
if (x<=l) and (y>=r) then
begin
s:=;
for i:= to t2 do
s:=s+tree[d2[i]].s;
for i:= to t1 do
s:=s-tree[d1[i]].s;
exit(s);
end
else begin
m:=(l+r) shr ;
s:=;
if (x<=m) then
begin
inc(d);
for i:= to t1 do
begin
dd1[d,i]:=d1[i];
d1[i]:=tree[d1[i]].l;
end;
for i:= to t2 do
begin
dd2[d,i]:=d2[i];
d2[i]:=tree[d2[i]].l;
end;
s:=s+getans(l,m,x,y);
for i:= to t1 do
d1[i]:=dd1[d,i];
for i:= to t2 do
d2[i]:=dd2[d,i];
dec(d);
end;
if y>m then
begin
for i:= to t1 do
d1[i]:=tree[d1[i]].r;
for i:= to t2 do
d2[i]:=tree[d2[i]].r;
s:=s+getans(m+,r,x,y);
end;
exit(s);
end;
end; function ask(l,r,x,y:longint):longint;
var i:longint;
begin
if r= then exit();
if l=n+ then exit();
if x=n+ then exit();
if y= then exit();
dec(l);
t1:=;
t2:=;
d1[]:=ph[l];
d2[]:=ph[r];
i:=l;
while i> do
begin
if h[i]<> then
begin
inc(t1);
d1[t1]:=h[i];
end;
i:=i-lowbit(i);
end;
i:=r;
while i> do
begin
if h[i]<> then
begin
inc(t2);
d2[t2]:=h[i];
end;
i:=i-lowbit(i);
end;
d:=;
exit(getans(,n,x,y));
end; procedure del(x,y:longint);
begin
while x<=n do
begin
h[x]:=insert(,n,h[x],y,-);
x:=x+lowbit(x);
end;
end; begin
readln(n,m);
for i:= to n do
begin
readln(a[i]);
b[a[i]]:=i;
end;
for i:=n downto do
begin
ans:=ans+get(a[i]-);
add(a[i]);
end;
h[]:=build(,n);
ph[]:=h[];
for i:= to n do
ph[i]:=insert(,n,ph[i-],a[i],);
for i:= to m do
begin
readln(x);
y:=b[x];
writeln(ans);
ans:=ans-ask(,y-,x+,n)-ask(y+,n,,x-);
del(y,x);
end;
end.
bzoj3295的更多相关文章
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- 【bzoj3295】 Cqoi2011—动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 (题目链接) 题意 给出某种排列,按照某种顺序依次删除m个数,在每次删除一个数前统计序列中逆序 ...
- 【BZOJ3295】动态逆序对(线段树,树状数组)
[BZOJ3295]动态逆序对(线段树,树状数组) 题面 Description 对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的 ...
- BZOJ3295 [Cqoi2011]动态逆序对 分治 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8678185.html 题目传送门 - BZOJ3295 题意 对于序列$A$,它的逆序对数定义为满足$i< ...
- 【bzoj3295】动态逆序对
Portal --> bzoj3295 Solution 虽然说这个可能原本是一道愉快的树套树但是 没有强制在线并且是三维限制那就大力cdq分治啊! 看到"按照某个顺序依次删除 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- BZOJ3295动态逆序对
一道比较傻的CDQ分治 CDQ: 主要用于解决三位偏序的问题 #include<cstdio> #include<cctype> #include<algorithm&g ...
- 【BZOJ3295】动态逆序对(BIT套动态加点线段树)
题意:对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. 给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对 ...
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- bzoj3295 洛谷P3157、1393 动态逆序对——树套树
题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...
随机推荐
- Java基础知识强化16:深入分析Java线程中断机制
1.Thread.interrupt真的能中断线程吗? 在平时的开发过程中,相信都会使用到多线程,在使用多线程时,大家也会遇到各种各样的问题,今天我们就来说说一个多线程的问题——线程中断. ...
- SQL Server DBA工作内容详解
在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色.DBA的工作目标就是确保Microsoft SQ ...
- jQuery 获取文件后缀的方法
var location=$("input[name='file']").val(); var point = location.lastIndexOf("." ...
- excel中VBA对多个文件的操作
添加引用 "Scripting.FileSystemObject" (Microsoft Scripting Runtime) '用于操作文件.目录 Sub 数据整理部分() ' ...
- Less 关于css hack的写法
由于工作需要,最近一直在弄css转写less,遇到最多的问题就是 hack的写法,一些IE的hack,less不支持编译: 常见的不支持的hack如下: IE的滤镜写法 \9\0 IE8部分支持 ...
- JAVA DATE解析(时间戳解析为固定格式)
public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (d ...
- AndroidManifest.xml--android系统权限定义
1. 系统编译结束自动生成的java类,描述系统所有定义的权限 out/target/common/R/android/Manifest.java 2. 权限检查方法 frameworks/base/ ...
- JS计算指定日期是距今的第几周,星期几
无意中在百度知道上发现这样一个问题,就抽时间见写了一个函数. 首先我们需要明确,既然是指定日期距今的第几周,那么就要知道指定的日期是什么,而且是不能确定的,会根据使用者不同而得到不同的日期,所以我们需 ...
- 【转】 IOS,objective_C中用@interface和 @property 方式声明变量的区别
原文: http://blog.csdn.net/ganlijianstyle/article/details/7924446 1.在 @interface :NSObject{} 的括号中,当然N ...
- 12XML(可扩展标记语言)
XML:eXtensible Markup Language 什么是标记语言?什么是标记? 标记(Markup):文档中任何不想被打印输出的部分(不是真正的文档内容,联想读书时做的“读书笔记”,在旁边 ...