【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的一个排列,按照某种顺序依 ...
随机推荐
- AJPFX关于多线程概述及应用
一.认识多任务.多进程.单线程.多线程要认识多线程就要从操作系统的原理说起. 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情.比如你在copy东西的时候 ...
- jQuery中面向对象思想实现盒子内容切换
这里主要是模拟小米官网中的首页的内容模块实现的主要动态效果 布局:采用了bootstrap框架进行布局,及其其中的字体图标 html: <!-- 内容 --> <div class= ...
- Java多态学习笔记
面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...
- java 获取ip地址
1.使用WIFI 首先设置用户权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"& ...
- NIO入门之轻松读取大文件
NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...
- IOS中经典的缓存对比
http://bpoplauschi.wordpress.com/2014/03/21/ios-image-caching-sdwebimage-vs-fastimage/
- 保密安全风险自评估单机版检查工具V1.0
下载链接:http://download.csdn.net/download/moremoretea1983/10273128
- Gym - 100676G Training Camp (状压dp)
G. Training Camp[ Color: Yellow ]Montaser is planning to train very hard for ACM JCPC 2015; he has p ...
- 循环实现数组filter方法
// 循环实现数组 filter 方法 const selfFilter = function (fn, context){ // 如果调用的地方使用箭头函数,这里的this岂不是不对了,那该怎么解决 ...
- 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 ...