【BZOJ3295】动态逆序对(BIT套动态加点线段树)
题意:对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。
给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。
N<=100000 M<=50000
思路:树套树即可,第i棵树维护前i位中1-j的个数,支持区间求和
外面要套BIT来实现区间加
本来维护剩下的数就可以,但初始化可能要开(n log^2 n) 个个节点,这题又只有128MB……
所以只能维护删除的数了,如果256MB乱搞就行了……
var t:array[..,..]of longint;
sum:array[..]of int64;
root,a,b,a1,a2,c:array[..]of longint;
n,m,i,x,cnt,l,r,j:longint;
ans:int64; procedure pushup(x:longint);
begin
l:=t[x,]; r:=t[x,];
sum[x]:=sum[l]+sum[r];
end; procedure update(l,r,x,v:longint;var p:longint);
var mid:longint;
begin
if p= then
begin
inc(cnt); p:=cnt;
end;
if l=r then
begin
sum[p]:=sum[p]+v; exit;
end;
mid:=(l+r)>>;
if x<=mid then update(l,mid,x,v,t[p,]);
if x>mid then update(mid+,r,x,v,t[p,]);
pushup(p);
end; function query(l,r,x,y,p:longint):int64;
var mid:longint;
begin
if p= then exit();
if (l>=x)and(r<=y) then exit(sum[p]);
mid:=(l+r)>>;
query:=;
if x<=mid then query:=query+query(l,mid,x,y,t[p,]);
if y>mid then query:=query+query(mid+,r,x,y,t[p,]);
pushup(p);
end; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; procedure change(i,j,v:longint);
var k:longint;
begin
k:=i;
while k<=n do
begin
update(,n,j,v,root[k]);
k:=k+lowbit(k);
end;
end; function getsum(x:longint):longint;
begin
getsum:=;
while x> do
begin
getsum:=getsum+c[x];
x:=x-lowbit(x);
end;
end; function ask(i,j,x,y:longint):int64;
var k:longint;
begin
ask:=;
if i>j then exit();
if x>y then exit();
k:=j;
while k> do
begin
ask:=ask+query(,n,x,y,root[k]);
k:=k-lowbit(k);
end;
k:=i-;
while k> do
begin
ask:=ask-query(,n,x,y,root[k]);
k:=k-lowbit(k);
end;
end; begin
assign(input,'bzoj3295.in'); reset(input);
assign(output,'bzoj3295.out'); rewrite(output);
readln(n,m); for i:= to n do
begin
read(a[i]);
b[a[i]]:=i;
a1[i]:=getsum(n)-getsum(a[i]);
ans:=ans+a1[i];
j:=a[i];
while j<=n do
begin
inc(c[j]);
j:=j+lowbit(j);
end;
end; fillchar(c,sizeof(c),);
for i:=n downto do
begin
a2[i]:=getsum(a[i]-);
j:=a[i];
while j<=n do
begin
inc(c[j]);
j:=j+lowbit(j);
end;
end; { for i:=1 to n do write(a1[i],' ');
writeln;
for i:=1 to n do write(a2[i],' '); }
for i:= to m do
begin
readln(x);
writeln(ans);
j:=b[x];
ans:=ans-(a1[j]+a2[j]-ask(,j-,x+,n)-ask(j+,n,,x-));
change(j,x,);
end; close(input);
close(output);
end.
【BZOJ3295】动态逆序对(BIT套动态加点线段树)的更多相关文章
- bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...
- BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...
- 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)
题目链接:http://codevs.cn/problem/4163/ 题目:
- bzoj3295 洛谷P3157、1393 动态逆序对——树套树
题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...
- bzoj3295[Cqoi2011]动态逆序对 树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5987 Solved: 2080[Submit][Sta ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- BZOJ3295 动态逆序对(树状数组套线段树)
[Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6058 Solved: 2117[Submit][Status][D ...
- BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
随机推荐
- 【转】Android中实现IPC的几种方式详细分析及比较
1.使用Bundle ----> 用于android四大组件间的进程间通信android的四大组件都可使用Bundle传递数据 所以如果要实现四大组件间的进程间通信 完全可以使用Bundl ...
- jQuery选择器之子元素选择器
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- centos 6.2用yum安装中文输入法
centos 6.2用yum安装中文输入法 1.su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system-> ...
- tac命令
tac——显示文件内容(反列显示) 命令所在路径:/usr/bin/tac 示例1: # tac /etc/hosts 反列显示/etc/目录下hosts文件内容 ☛适合查看内容较短的文件
- ftp 报错 200 Type set to A
最近在使用ssis 从ftp服务器抓起文件到本地的时候,发现连接ftp出错 200 Type set to A 解决办法: ftp connection 中 设置UsePassiveMode 为Tru ...
- Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)
1.开启界面获取返回值 (1)采用一种特殊的方式开启Activity: startActivityForResult(intent , 0): (2)在被开启的Activi ...
- sqlite3:深入理解sqlite3_stmt 机制
我们在使用sqlite3的过程中,涉及到批量操作时(批量插入.批量读...),总会遇到 sqlite3_stmt这个数据类型,按照官方解释说法是这样的:sqlite3_stmt是C接口中“准备语句对象 ...
- springBoot + KISSO实现单点登录
1:创建一个maven项目 kisso,然后再创建二个子项目都是springboot 2:二个boot项目的pom.xml都是一样的 就这三个依赖,3:接下来就是码代码了,首先在(在我这里)sprin ...
- VBA Promming——分支语句(解二元一次方程)
分支语句 If expression1 Then expressions ElseIf expression2 Then expressions Else expression End If 注:VB ...
- 利用MSF实现三层网络的一次内网渗透
目标IP192.168.31.207 很明显这是一个文件上传的靶场 白名单限制 各种尝试之后发现这是一个检测文件类型的限制 上传php大马文件后抓包修改其类型为 image/jpeg 上传大马之后发 ...