题意:对于序列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套动态加点线段树)的更多相关文章

  1. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  2. BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...

  3. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  4. bzoj3295 洛谷P3157、1393 动态逆序对——树套树

    题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...

  5. bzoj3295[Cqoi2011]动态逆序对 树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5987  Solved: 2080[Submit][Sta ...

  6. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  7. BZOJ3295 动态逆序对(树状数组套线段树)

    [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6058  Solved: 2117[Submit][Status][D ...

  8. BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7465  Solved: 2662[Submit][Sta ...

  9. 【CQOI2011】动态逆序对 BZOJ3295

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  10. 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治

    [BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...

随机推荐

  1. 前端之HTML样式

    <!doctype html> h5的文档声明 <html> 网页的根标签(根元素 html)--所有的代码都放置在此内 <head> <meta chars ...

  2. BZOJ3083: 遥远的国度(树链剖分)

    题意 $n$个节点的树,每个点有权值,支持三种操作 1. 换根 2.把$x$到$y$路径上节点权值变为$z$ 3.询问路径最小值 Sol 啥?你说这是TopTree的裸题?那你写去啊 很显然,如果没有 ...

  3. String 截取字符串#中间的文本

    通过正则实现: String regex = "#([^#]+)#"; @Test public void test() { String text = "#中俄建交七十 ...

  4. Javaweb学习笔记3—Serverlet

    今天来讲javaweb的第三个阶段学习. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 ...

  5. Sql Server 2012 分页方法分析(offset and fetch)

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中  offse ...

  6. 大数据开发学习之构建Hadoop集群-(0)

    有多种方式来获取hadoop集群,包括从其他人获取或是自行搭建专属集群,抑或是从Cloudera Manager 或apach ambari等管理工具来构建hadoop集群等,但是由自己搭建则可以了解 ...

  7. centos 更换yum源 (解决下载慢的问题)

    先看有没有安装wget         wget -V 如果没有执行   yum -y install wget    进行安装 然后进行配置的备份 mv /etc/yum.repos.d/CentO ...

  8. zabbix设置发送消息的时间

    需求:比如我有两个报警的媒介:邮件和微信,但是下班之后,晚上我不希望手机一直响,打扰我睡觉,邮件无所谓,可以24h发送 分析:那现在就需要把微信分时间段发送:比如06:00-24:00   这个时间点 ...

  9. python小随笔

    关于pip安装 .\pip.exe install --ignore-installed --upgrade tensorflow-gpu python可视化库 Seaborn:是一个基于matplo ...

  10. JavaEE-06 Servlet基础

    学习要点 Servlet生命周期 Servlet API的常用接口和类 Servlet的部署和配置 Servlet处理用户请求 Servlet JSP回顾 JSP技术开发web应用在服务器端生成网页的 ...