COGS 1715. [CQOI2011]动态逆序对
★★★ 输入文件:inverse.in 输出文件:inverse.out 简单对比
时间限制:2 s 内存限制:128 MB
【题目描述】
【输入格式】
【输出格式】
【样例输入】
5 4
1
5
3
4
2
5
1
4
2
【样例输出】
5
2
2
1 样例解释
(1,5,3,4,2)(1,3,4,2)(3,4,2)(3,2)(3)。
【提示】
N<=100000 M<=50000
【来源】
【题目来源】
树状数组+主席树
根cdq分治的速度差远了
#include <algorithm>
#include <cstdio>
#define N 100005
typedef long long LL;
int n,m,a[N],pos[N],size,rt[N],ls[N*],rs[N*],sum[N*],tot;
inline int lowbit(int x) {return x&(-x);}
void update(int l,int r,int &x,int t,int v)
{
if(!x) x=++tot;
sum[x]+=v;
if(l==r) return;
int mid=(l+r)>>;
if(t<=mid) update(l,mid,ls[x],t,v);
else update(mid+,r,rs[x],t,v);
}
void modify(int x,int y,int v)
{
for(;x<=n;x+=lowbit(x))
update(,n,rt[x],y,v);
}
LL query(int l,int r,int x,int L,int R)
{
if(!x) return ;
if(L<=l&&r<=R) return sum[x];
int mid=(l+r)>>;LL ret=;
if(L<=mid) ret+=query(l,mid,ls[x],L,R);
if(R>mid) ret+=query(mid+,r,rs[x],L,R);
return ret;
}
LL ask(int l,int r,int L,int R)
{
LL ret=;
for(int i=l-;i;i-=lowbit(i)) ret-=query(,n,rt[i],L,R);
for(int i=r;i;i-=lowbit(i)) ret+=query(,n,rt[i],L,R);
return ret;
}
int main()
{
freopen("inverse.in","r",stdin);
freopen("inverse.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
pos[a[i]]=i;
modify(i,a[i],);
}
LL ans=;
for(int i=;i<=n;++i) ans+=ask(,i-,a[i]+,n)+ask(i+,n,,a[i]-);
ans>>=;
for(int v;m--;)
{
printf("%lld\n",ans);
scanf("%d",&v);
v=pos[v];
ans-=ask(,v-,a[v]+,n)+ask(v+,n,,a[v]-);
modify(v,a[v],-);
}
return ;
}
COGS 1715. [CQOI2011]动态逆序对的更多相关文章
- BZOJ 3295: [Cqoi2011]动态逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3865 Solved: 1298[Submit][Sta ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- bzoj3295[Cqoi2011]动态逆序对 树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5987 Solved: 2080[Submit][Sta ...
- P3157 [CQOI2011]动态逆序对(树状数组套线段树)
P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...
- P3157 [CQOI2011]动态逆序对
P3157 [CQOI2011]动态逆序对 https://www.luogu.org/problemnew/show/P3157 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai&g ...
- 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)
3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...
- BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
随机推荐
- 使用BIND安装智能DNS服务器(二)---配置rndc远程控制
首先两个BIND DNS服务器要正常运行. 主DNS服务器IP:192.168.1.100 客户机DNS服务器IP:192.168.1.101 1 主DNS端配置: cd /etc/ 生成 ...
- 2-3 Flutter开发环境与iOS开发环境设置(Mac)
Mac下环境搭建 先不看了 都是Mac下的环境搭建
- Python模拟登录代码
注:访问http://127.0.0.1:8080/user/6,总是会要求必须有登录权限,也就是,若未登录,访问该页面,会跳转到登陆页面. 全自动模拟登录 半自动模拟登录:
- Swoole 协程与 Go 协程的区别
Swoole 协程与 Go 协程的区别 进程.线程.协程的概念 进程是什么? 进程就是应用程序的启动实例. 例如:打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资源,数据资源,独立的内存 ...
- Django 中ORM 的使用
一:Django 中 orm 的使用 1:手动新建一个数据库 2 :告诉Django连接哪个数据库 settings.py里配置数据库连接信息: #数据库相关的配置项 DATABASES ={ 'de ...
- LeetCode: 383 Ransom Note(easy)
题目: Given an arbitrary ransom note string and another string containing letters from all the magazin ...
- Intellij IDEA生成JavaDoc(转)
Intellij IDEA生成JavaDoc(转)
- selenium IDE界面介绍(转)
1.文件:创建.打开和保存测试案例和测试案例集.编辑:复制.粘贴.删除.撤销和选择测试案例中的所有命令.Options : 用于设置seleniunm IDE. 2.用来填写被测网站的地址. 3.速度 ...
- 《SQL 进阶教程》 case:在 UPDATE 语句里进行条件分支
1.对当前工资为30万日元以上的员工,降薪10%:2.对当前工资为25万日元以上且不满28万日元的员工,加薪20% update salaries set salary = case when sal ...
- linux查看系统版本(适用于centos、ubutun,其他类型没有进行测试)
方法一:cat /etc/issue 或more /etc/issue root@salt-master:~# cat /etc/issueUbuntu 16.04.2 LTS \n \l 方法二:l ...