题意:对于序列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. AJPFX关于多线程概述及应用

    一.认识多任务.多进程.单线程.多线程要认识多线程就要从操作系统的原理说起. 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情.比如你在copy东西的时候 ...

  2. jQuery中面向对象思想实现盒子内容切换

    这里主要是模拟小米官网中的首页的内容模块实现的主要动态效果 布局:采用了bootstrap框架进行布局,及其其中的字体图标 html: <!-- 内容 --> <div class= ...

  3. Java多态学习笔记

    面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...

  4. java 获取ip地址

    1.使用WIFI 首先设置用户权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"& ...

  5. NIO入门之轻松读取大文件

    NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...

  6. IOS中经典的缓存对比

    http://bpoplauschi.wordpress.com/2014/03/21/ios-image-caching-sdwebimage-vs-fastimage/

  7. 保密安全风险自评估单机版检查工具V1.0

    下载链接:http://download.csdn.net/download/moremoretea1983/10273128

  8. Gym - 100676G Training Camp (状压dp)

    G. Training Camp[ Color: Yellow ]Montaser is planning to train very hard for ACM JCPC 2015; he has p ...

  9. 循环实现数组filter方法

    // 循环实现数组 filter 方法 const selfFilter = function (fn, context){ // 如果调用的地方使用箭头函数,这里的this岂不是不对了,那该怎么解决 ...

  10. Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use ...报错

    错误截图 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* t ...