bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295
正着删除看做倒着添加
对答案有贡献的数对满足以下3个条件:
出现时间:i<=j
权值大小关系:x[i]>x[j]
位置关系:pos[i]<pos[j]
或者是
出现时间:i<=j
权值大小关系:x[i]<x[j]
位置关系:pos[i]>pos[j]
所以是三维偏序问题
排序时间,CDQ分治解决权值大小关系,树状数组解决位置关系
CDQ分治后,只要不重新sort,内部区间仍满足 第一维 排序的大小顺序
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001
#define M 50001 #define lowbit(x) x&-x int n; struct node
{
int pos,val,tim;
}e[N],a[N]; int dy[N],cut[N]; int c[N]; long long ans[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} bool cmp(node p,node q)
{
return p.tim<q.tim;
} void add(int x,int y)
{
while(x<=n)
{
c[x]+=y;
x+=lowbit(x);
}
} int query(int x)
{
int sum=;
while(x)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
} void solve(int l,int r)
{
if(l==r) return;
int mid=l+r>>;
for(int i=l;i<=r;++i)
{
if(e[i].val<=mid) add(e[i].pos,);
else ans[e[i].tim]+=query(n)-query(e[i].pos);
}
for(int i=l;i<=r;++i)
if(e[i].val<=mid) add(e[i].pos,-);
for(int i=l;i<=r;++i)
{
if(e[i].val>mid) add(e[i].pos,);
else ans[e[i].tim]+=query(e[i].pos-);
}
for(int i=l;i<=r;++i)
if(e[i].val>mid) add(e[i].pos,-);
int i=l,j=mid+;
for(int k=l;k<=r;++k)
{
if(e[k].val<=mid) a[i++]=e[k];
else a[j++]=e[k];
}
for(int k=l;k<=r;++k) e[k]=a[k];
solve(l,mid);
solve(mid+,r);
} int main()
{
int m,x;
read(n); read(m);
for(int i=;i<=n;++i)
{
read(x);
dy[x]=i;
e[i].pos=i;
e[i].val=x;
}
int ti=n;
for(int i=;i<=m;++i)
{
read(x);
e[dy[x]].tim=ti--;
}
sort(e+,e+n+,cmp);
for(int i=;i<=n;++i) e[i].tim=i;
solve(,n);
for(int i=;i<=n;++i) ans[i]+=ans[i-];
for(int i=m;i;--i) cout<<ans[n-m+i]<<'\n';
}
3295: [Cqoi2011]动态逆序对
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 5946 Solved: 2064
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
5
3
4
2
5
1
4
2
Sample Output
2
2
1
样例解释
(1,5,3,4,2)(1,3,4,2)(3,4,2)(3,2)(3)。
HINT
N<=100000 M<=50000
bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对的更多相关文章
- bzoj千题计划153:bzoj2431: [HAOI2009]逆序对数列
http://www.lydsy.com/JudgeOnline/problem.php?id=2431 dp[i][j] 表示i的排列,有j个逆序对的方案数 加入i+1,此时i+1是排列中最大的数, ...
- 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)
3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...
- BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- 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]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...
- [bzoj3295][Cqoi2011]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- GIT理解
以前从来没听过GIT,根本不知道是什么东西.老师突然让注册一个GIT帐号,不知道怎么注册, 真有点不知所措了,又听说是全英文的,感觉也是醉了!登录进去看了看,看的似懂非懂,自己 也不敢妄下定论于是上网 ...
- 寒假作业第二篇随笔(A+B)
Github链接:https://github.com/heihuifei/object-oriented A+B Format (20) Calculate a + b and output the ...
- 一个简单的加减乘除自动生成小程序升级版(JAVA)
import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...
- 微信小程序demo——入门级(附源码)
最近小程序又蠢蠢欲动,出了一个公众号绑定小程序功能,目测不错,就看了下微信小程序文档,顺便写了几行代码,后续有空会持续更新维护. 源码:https://github.com/SibreiaDante/ ...
- Internet History, Technology and Security (Week 6)
Week 6 Technology: Transport Control Protocol (TCP) Welcome to Week 6 of IHTS. We are in our second ...
- XMind2TestCase:一个高效测试用例设计的解决方案!
一.背景 软件测试过程中,最重要.最核心就是测试用例的设计,也是测试童鞋.测试团队日常投入最多时间的工作内容之一. 然而,传统的测试用例设计过程有很多痛点: 1.使用Excel表格进行测试用例设计,虽 ...
- 【高级】PHP-FPM和Nginx的通信机制
PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通 ...
- Linux命令01
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...
- 数据库性能优化之SQL语句优化(下)
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最 ...
- 用SQL查询方式显示GROUP BY中的TOP解决方法[转]
用SQL查询方式显示GROUP BY中的TOP怎样用一个SQL语句来显示 分组后每个组的前几位 比如把一个学校所有学生的成绩按班级分组,再显示每个班级前五名的信息. 班级 学生 成绩 一班 ...