【bzoj3295】动态逆序对
Solution
虽然说这个可能原本是一道愉快的树套树但是
没有强制在线并且是三维限制那就大力cdq分治啊!
看到“按照某个顺序依次删除”这样的字眼,比较容易联想到一个套路:反过来看,变成按照某个顺序依次插入
那么对于一个询问,删掉它之前(转化完了之后就是插入它之后)的所会影响到的逆序对数可以分为两种:一种是在它前面但是比它大的,一种是在它后面但是比它小的
对于每一个转化后的插入我们都计算出这样两个值的和,然后答案显然就是累加一下就好了
所以我们按照位置递增做一次cdq,然后再按照位置递减做一次cdq,就可以将上面两种情况分别算出来了
总的来说就是:时间维用排序,位置维用cdq,数值维用树状数组,然后就很愉快滴做完了
注意因为一开始的时候我们将顺序反了过来所以最后要反着输出
代码大概长这个样子:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=100010;
struct Op{
int pos,val,t;
friend bool operator < (Op x,Op y)
{return x.t<y.t;}
}a[N],rec[N];
int lis[N],pos[N];
ll c[N],ans[N];
int n,m,tot,mx;
void insert(int x,int delta){
for (;x;x-=x&-x) c[x]+=delta;
}
int query(int x){
int ret=0;
for (;x<=mx;x+=x&-x) ret+=c[x];
return ret;
}
void solve(int l,int r){
if (l==r) return;
int mid=l+r>>1;
solve(l,mid);
solve(mid+1,r);
int tmp,tp=l,tot=l-1;
for (int i=mid+1;i<=r;++i){
while (tp<=mid&&a[tp].pos<a[i].pos)
rec[++tot]=a[tp],insert(a[tp++].val,1);
rec[++tot]=a[i];
ans[a[i].t]+=query(a[i].val+1);
}
for (int i=l;i<tp;++i) insert(a[i].val,-1);
for (int i=tp;i<=mid;++i) rec[++tot]=a[i];
for (int i=l;i<=r;++i) a[i]=rec[i];
}
int main(){/*{{{*/
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x;
scanf("%d%d",&n,&m);
mx=0;
for (int i=1;i<=n;++i)
scanf("%d",&a[i].val),a[i].pos=i,pos[a[i].val]=i,mx=max(mx,a[i].val);
for (int i=1;i<=m;++i){
scanf("%d",&x);
a[pos[x]].t=m-i+1;
}
sort(a+1,a+1+n);
solve(1,n);
for (int i=1;i<=n;++i)
a[i].pos*=-1,a[i].val=n-a[i].val+1;
sort(a+1,a+1+n);
solve(1,n);
for (int i=1;i<=m;++i) ans[i]+=ans[i-1];
for (int i=1;i<=m;++i)
printf("%lld\n",ans[m-i+1]);
}/*}}}*/
【bzoj3295】动态逆序对的更多相关文章
- BZOJ3295 动态逆序对(树状数组套线段树)
[Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6058 Solved: 2117[Submit][Status][D ...
- bzoj3295 动态逆序对
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- BZOJ3295动态逆序对
一道比较傻的CDQ分治 CDQ: 主要用于解决三位偏序的问题 #include<cstdio> #include<cctype> #include<algorithm&g ...
- 【BZOJ3295】动态逆序对(线段树,树状数组)
[BZOJ3295]动态逆序对(线段树,树状数组) 题面 Description 对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- bzoj3295 洛谷P3157、1393 动态逆序对——树套树
题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...
- 【题解】动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393]
[题解]动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393] 水一水QAQ 题目链接: \([P3157]\) \([BZOJ3295]\) [题目描述] 对于一个序 ...
- [bzoj3295][Cqoi2011]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
- bzoj3295[Cqoi2011]动态逆序对 树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5987 Solved: 2080[Submit][Sta ...
随机推荐
- Linux 安装ActiveMQ(使用Mac远程访问)
阅读本文需要安装JDK 一 ActiveMQ简介 activemq是用java语言编写的一款开源消息总线 activemq是apache出品 activemq消息的传递有两种类型 一种是点对点: 即一 ...
- socket_tcp协议_loadrunner测试
1.lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:8888", Lrs ...
- python爬取淘宝华为手机
import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...
- Redis的数据类型以及每种数据类型的使用场景
人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基础?我也这么觉 ...
- 基于NABCD评论作品,及改进建议
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 杨金铭 张宇 卢帝同 一.拉格朗日2018--<飞词> 1.1 NABCD分析 N(Need,需求) ...
- 王者荣耀交流协会-小组互评Alpha版本
小组分工如下: 1.探路者---贪吃蛇(测评人:王玉玲) 链接:http://www.cnblogs.com/WYLFZ/p/7805520.html http://www.cnblogs.co ...
- 软件工程 speedsnail 第二次冲刺10
20150527 完成任务:蜗牛碰到线后速度方向的调整:已经基本实现多方向的反射: 遇到问题: 问题1 反射角的问题 解决1 利用tan()三角函数 明日任务: 大总结.找到新问题.布置下一次冲刺方案
- ios framework 使用图片资源
framework 的制作工程见:http://www.cocoachina.com/ios/20141126/10322.html: 遇到问题: 由于自己的framework 要使用图片资源,最后找 ...
- WebService(二)
使用eclipse开发webservice的服务器端以及客户端的简单实例 1.服务端 在eclipse中像建立一个web项目一样,new->Dynamic Web Project A.建一个需要 ...
- 第86天:HTML5应用程序标签和智能表单
一.HTML5应用程序标签 1.datalist需要数据载体 input list属性指向数据源 2.progress进度条 -webkit-appearance: none; /*如果要改默认样 ...