「CQOI2011」动态逆序对
「CQOI2011」动态逆序对
传送门
树套树。
删除一个位置的元素带来的减损数等于他前面大于它的和后面小于它的,然后这个直接树状数组套主席树维护一下就好了。
参考代码:
#include <cstdio>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
typedef long long LL;
const int _ = 1e5 + 5, __ = 1e7 + 5;
int n, q, a[_], pos[_];
int tot, rt[_], lc[__], rc[__], t1[_], t2[_]; LL cnt[__];
inline void update(int& p, int x, int v, int l = 1, int r = n) {
if (!p) p = ++tot; cnt[p] += v;
if (l == r) return ;
int mid = (l + r) >> 1;
if (x <= mid) update(lc[p], x, v, l, mid);
else update(rc[p], x, v, mid + 1, r);
}
inline LL Query(int l, int r, int x, int opt) {
int c1 = 0, c2 = 0; --l;
for (rg int i = l; i >= 1; i -= i & -i) t1[++c1] = rt[i];
for (rg int i = r; i >= 1; i -= i & -i) t2[++c2] = rt[i];
l = 1, r = n;
LL res = 0;
while (l < r) {
int mid = (l + r) >> 1;
if (x <= mid) {
if (opt == 0) {
for (rg int i = 1; i <= c1; ++i) res -= cnt[rc[t1[i]]];
for (rg int i = 1; i <= c2; ++i) res += cnt[rc[t2[i]]];
}
for (rg int i = 1; i <= c1; ++i) t1[i] = lc[t1[i]];
for (rg int i = 1; i <= c2; ++i) t2[i] = lc[t2[i]];
r = mid;
} else {
if (opt == 1) {
for (rg int i = 1; i <= c1; ++i) res -= cnt[lc[t1[i]]];
for (rg int i = 1; i <= c2; ++i) res += cnt[lc[t2[i]]];
}
for (rg int i = 1; i <= c1; ++i) t1[i] = rc[t1[i]];
for (rg int i = 1; i <= c2; ++i) t2[i] = rc[t2[i]];
l = mid + 1;
}
}
return res;
}
int main() {
read(n), read(q);
LL ans = 0;
for (rg int i = 1; i <= n; ++i) {
read(a[i]), pos[a[i]] = i;
ans += Query(1, i - 1, a[i], 0);
for (rg int j = i; j <= n; j += j & -j) update(rt[j], a[i], 1);
}
for (rg int x; q--; ) {
printf("%lld\n", ans);
read(x);
ans -= Query(1, pos[x] - 1, x, 0);
ans -= Query(pos[x] + 1, n, x, 1);
for (rg int j = pos[x]; j <= n; j += j & -j) update(rt[j], x, -1);
}
return 0;
}
「CQOI2011」动态逆序对的更多相关文章
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- BZOJ 3295 【Cqoi2011】 动态逆序对
Description 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依 ...
- 【BZOJ3295】【CQOI2011】动态逆序对
cdq分治经典例题,然而智商掉线傻逼错误坑了两天 原题: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你 ...
- 【BZOJ】【3295】【CQOI2011】动态逆序对
树套树 Orz zyf神犇 时光倒流……逆序处理,将删点改为加点,动态维护序列. 由于是动态,要加点,所以用树状数组:同时又需要求序列中求比当前元素大/小的元素个数,所以要用平衡树. 所以方法就是在树 ...
- 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 ...
随机推荐
- 探讨LoadRunner的并发用户和集合点
近来跟踪一个项目,发现同事们在执行性能测试时,比较热衷于使用集合点,从概念上认为要得到并发用户就必须设置集合点,认为在执行一个压力测试脚本时,设置了集合点才算是有效的并发用户,没有设置结合点,就认为可 ...
- Python基础数据类型以及对应方法
数据类型 不可变数据(四个):Number(数字).String(字符串).Tuple(元组).Sets(集合):可哈希 可变数据(两个):List(列表).Dictionary(字典).不可哈希 字 ...
- 五、request模块
描述:requests是python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比python自带的网络库urllib更加简单.方便和人性化:使 ...
- 怎么拆分一个Excel工作簿中的多个工作表?
打开需要编辑的Excel文档.如图所示,工作簿下方有很多工作表.现在需要将这些工作表单独拆分开成一个个工作簿. 右键任意一个工作表标签,在弹出的下拉列表中选择查看代码.即弹出代码窗口.如下图所示. ...
- CSS-禁止文本被选中
pc端: .not-select{ -moz-user-select:none; /*火狐*/ -webkit-user-select:none; /*webkit浏览器*/ -ms-user-sel ...
- 「JSOI2013」旅行时的困惑
「JSOI2013」旅行时的困惑 传送门 由于我们的图不仅是一个 \(\text{DAG}\) 而且在形态上还是一棵树,也就是说我们为了实现节点之间互相可达,就必须把每条边都覆盖一次,因为两个点之间的 ...
- 引入C/C++动态库
[DllImport("SocketAPI.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = t ...
- LNMP架构及应用部署!(重点)
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. WNMP代表的就是:Windows系统下Nginx+MySQL+PHP这种网站服务器架构. WAMP代表的就是: ...
- 【降维】主成分分析PCA推导
本博客根据 百面机器学习,算法工程师带你去面试 一书总结归纳,公式都是出自该书. 本博客仅为个人总结学习,非商业用途,侵删. 网址 http://www.ptpress.com.cn 目录: PCA最 ...
- redhat 7.6 安装 git
1.下载git包 下载网址:https://mirrors.edge.kernel.org/pub/software/scm/git/ //自己下载想要的版本 或者直接在Linux 直接使用wge ...