「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 ...
随机推荐
- 一张linux光盘查看是哪个版本号的方法
在此查看版本号,方法如下:打开光盘,查找rpm包中的release,就是版本号.
- Airflow 操作知识总结(完善中)
airflow默认以utc时区运行,如果需要计算正确的时间,需要把时间进行时区转换,核心代码如下 #将本地时间转换为utc时间,再设置为start_date tz = pytz.timezone('A ...
- vs2019 opencv4的相关配置
opencv4.11存在改动,导致许多demo没有办法正常运行,但是配置方法却是相同的. 主要是连接器输入,头文件包含路径,库路.如果想要调试,还需要设置调试文件符号表. [未完待续]
- 基于MHA的MYSQL高可用方案
一.MHA 简介 MHA (Master High Availability )目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司的 youshimaton 员工(现就职 ...
- P3378 (模板)并查集
使用带路径压缩的并查集,不然会TLE AC代码: #include <bits/stdc++.h> #define MP make_pair #define PB push_back #d ...
- R语言 plot()函数
语法: plot(x, y, ...) x,y分别是两个向量,x为横轴坐标,y为纵轴坐标 其他参数: type= "p" for points, 散点图 默认 "l&qu ...
- 使用pycharm创建Django项目,'django-admin' 不是内部或外部命令
报错信息如下: (笔者的电脑为win10,python3.7,django 2.2.6 ) 第一种情况的解决方案:没有配置环境变量,Django安装之后,需要配置环境变量,命令django-admin ...
- UIViewController的API
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil; 返回一个新初始化 ...
- 关于报错:Warning: Cannot modify header information - headers already sent by (output started at
8月5日,第一个项目即将完成,测试时,发现登录功能会出现小问题:记住密码的时候会报错 Warning: Cannot modify header information - headers alrea ...
- Python:字典类型
概念 无序的,可变的,键值对集合 定义 方式1 {key1: value1, key2: value2, ......} 方式2 fromkeys(S, v=None) 静态方法:类和对象都可以调用 ...