bzoj 3295 CDQ求动态逆序对
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define PLL pair<LL, LL>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +;
const double PI = acos(-);
const double eps = 1e-; int n, m, pos[N], R[N], L[N];
LL ans[N]; struct BIT {
int a[N];
void modify(int x, int v) {
for(int i = x; i <= n; i += i & -i)
a[i] += v;
}
int sum(int x) {
int ans = ;
for(int i = x; i; i -= i & -i)
ans += a[i];
return ans;
} } bit; struct QUS {
int t, x, val;
} qus[N], tmp[N]; void cdq(int l, int r) {
if(l == r) return;
int mid = l + r >> ;
cdq(l, mid); cdq(mid + , r); int j = l;
for(int i = mid + ; i <= r; i++) {
while(j <= mid && qus[j].x < qus[i].x) bit.modify(qus[j++].val, );
L[qus[i].t] += bit.sum(n) - bit.sum(qus[i].val);
}
for(int i = j - ; i >= l; i--) bit.modify(qus[i].val, -); j = mid;
for(int i = r; i >= mid + ; i--) {
while(j >= l && qus[j].x > qus[i].x) bit.modify(qus[j--].val, );
R[qus[i].t] += bit.sum(qus[i].val - );
}
for(int i = j + ; i <= mid; i++) bit.modify(qus[i].val, - ); int tot = l, p = l, q = mid + ;
while(p <= mid && q <= r) {
if(qus[p].x < qus[q].x) tmp[tot++] = qus[p++];
else tmp[tot++] = qus[q++];
}
while(p <= mid) tmp[tot++] = qus[p++];
while(q <= r) tmp[tot++] = qus[q++];
for(int i = l; i <= r; i++) qus[i] = tmp[i];
} int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
int val; scanf("%d", &val);
pos[val] = i;
} int idx = n;
for(int i = ; i <= m; i++) {
int val; scanf("%d", &val);
qus[idx].val = val;
qus[idx].t = idx;
qus[idx--].x = pos[val];
pos[val] = -;
} for(int i = ; i<= n; i++) {
if(pos[i] != -) {
qus[idx].val = i;
qus[idx].t = idx;
qus[idx--].x = pos[i];
pos[i] = -;
}
} cdq(, n);
for(int i = ; i <= n; i++) ans[i] = ans[i - ] + R[i] + L[i];
for(int i = n; i > n - m; i--) printf("%lld\n", ans[i]);
return ;
}
/*
*/
bzoj 3295 CDQ求动态逆序对的更多相关文章
- BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...
- 洛谷P1393 动态逆序对(CDQ分治)
传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...
- BZOJ 3295 动态逆序对 | CDQ分治
BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似C ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- BZOJ 3295: [Cqoi2011]动态逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3865 Solved: 1298[Submit][Sta ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )
hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...
随机推荐
- c++ string写时复制
string写时复制:将字符串str1赋值给str2后,除非str1的内容已经被改变,否则str2和str1共享内存.当str1被修改之后,stl才为str2开辟内存空间,并初始化. #include ...
- POJ 3254 状态压缩 DP
B - Corn Fields Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536KB ...
- 用Apache Spark和TensorFlow进行的深度学习
原文:https://databricks.com/blog/2016/01/25/deep-learning-with-apache-spark-and-tensorflow.html by Tim ...
- JS把内容动态插入到DIV
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- 持续集成之Jenkins安装部署
1.系统环境和安装java环境 [root@devops ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 安装java ...
- CentOS6.8 安装rar解压缩
wget http://www.rarsoft.com/rar/rarlinux-x64-5.4.0.tar.gz tar -zxvf rarlinux-x64-5.4.0.tar.gz cd rar ...
- 【bzoj1774-过路费】floyd+排序
题意:n个点,m条双向边,每个点有权值c[i],每条边有权值a[i].d,一条路径的费用=每条边的权值和+各个点的权值的最大值,即sigma(a[i].d)+max(c[i]).q个询问,问x到y的最 ...
- 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛
[题意]n头牛,其中最高h.给定r组关系a和b,要求满足h[b]>=h[a]且a.b之间都小于min(h[a],h[b]),求第i头牛可能的最高高度. [算法]差分 [题解]容易发现r组关系只能 ...
- mybatis 插入语句name no find
1.可参考连接:https://www.cnblogs.com/thomas12112406/p/6217211.html 2.dao层的配置 void addUser(@Param("un ...
- 【tomcat】手动部署动态JavaWeb项目到tomcat
1.通过修改server.xml进行配置 1.查看项目的目录结构: tomcat运行时加载WebConmtent目录