bzoj2141排队
/*
动态求逆序对,可以树套树来写, 将交换操作理解成插入和删除比较好理解, 里层是个区间求和的线段树就好了
或者叫 带修主席树?
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define ll long long
#define M 23000
#define mmp make_pair
using namespace std;
int read() {
int nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
int ls[M << 8], rs[M << 8], t[M << 8], rt[M], a[M], b[M], cnt, ans, n, q;
int lowbit(int x) {
return x & (-x);
}
void modify(int &now, int l, int r, int pl, int v) {
if(l > pl || r < pl) return;
if(now == 0) now = ++cnt;
t[now] += v;
if(l == r) return;
int mid = (l + r) >> 1;
modify(ls[now], l, mid, pl, v), modify(rs[now], mid + 1, r, pl, v);
}
void Modify(int x, int pl, int v) {
for(; x <= n; x += lowbit(x)) modify(rt[x], 1, n, pl, v);
}
int query(int now, int l, int r, int ln, int rn) {
if(l > rn || r < ln) return 0;
if(l >= ln && r <= rn) return t[now];
int mid = (l + r) >> 1;
return query(ls[now], l, mid, ln, rn) + query(rs[now], mid + 1, r, ln, rn);
}
int Query(int x, int L, int R) {
if(L > R) return 0;
int tmp = 0;
for(; x; x -= lowbit(x)) tmp += query(rt[x], 1, n, L, R);
return tmp;
}
int main() {
n = read();
for(int i = 1; i <= n; i++) a[i] = b[i] = read();
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
for(int i = 1; i <= n; i++) {
ans += Query(i, a[i] + 1, n);
Modify(i, a[i], 1);
}
cout << ans << "\n";
q = read();
while(q--) {
int x = read(), y = read();
if(x > y) swap(x, y);
ans += Query(y - 1, a[x] + 1, n) - Query(x, a[x] + 1, n);
ans -= Query(y - 1, 1, a[x] - 1) - Query(x, 1, a[x] - 1);
ans -= Query(y - 1, a[y] + 1, n) - Query(x, a[y] + 1, n);
ans += Query(y - 1, 1, a[y] - 1) - Query(x, 1, a[y] - 1);
if(a[x] < a[y]) ans++;
else if(a[x] > a[y]) ans--;
Modify(x, a[x], -1), Modify(y, a[y], -1);
swap(a[x], a[y]);
Modify(x, a[x], 1), Modify(y, a[y], 1);
cout << ans << "\n";
}
return 0;
}
bzoj2141排队的更多相关文章
- BZOJ2141 排队 树状数组 分块
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2141.html 题目传送门 - BZOJ2141 题意 给定一个序列 $a$ ,先输出原先的逆序对数. ...
- bzoj2141排队(辣鸡但是好写的方法)
题意很明确,也非常经典: 一个支持查询 区间中比k大的数的个数 并且支持单点修改的序列 ——因为题意可以转化为:查询这两个数中比后者大的个数.比后者小的个数.比前者大的个数.比前者小的个数(根据这4个 ...
- BZOJ2141: 排队
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2141 分块加树状数组. 离散化之后,每一个块建一个树状数组.交换x,y,与x左边的数和y右 ...
- BZOJ2141排队——树状数组套权值线段树(带修改的主席树)
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...
- bzoj2141: 排队(分块+树状数组)
块套树为什么会这么快.. 先跑出原序列逆序对. 显然交换两个位置$l,r$,对$[1,l),(r,n]$里的数没有影响,所以只需要考虑$[l,r]$内的数. 设$(l,r)$内的数$a_i$,则按以下 ...
- BZOJ2141:排队(分块,树状数组)
Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们 ...
- 【分块】【树套树】bzoj2141 排队
考虑暴力更新的情况,设swap的是L,R位置的数.swap之后的逆序对数应该等于:之前的逆序对数+[L+1,R-1]中比 L位置的数 大的数的个数-[L+1,R-1]中比 L位置的数 小的数的个数-[ ...
- [bzoj2141][排队] (分块大法好)
Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的 ...
- 树套树Day1线段树套平衡树bzoj3196
您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义为小于x,且最大的数)5.查 ...
随机推荐
- 命令行听歌http://www.linuxsir.org/bbs/thread280142.html?pageon=1#1584689
在纯字符界面下听歌 利用 play 命令可以在命令行中播放音频文件,在纯字符界面下也没问题! ----------------------------------------------------- ...
- centos 安装composer
1 下载composer.phar curl -sS https://getcomposer.org/installer | php 2 设置全局调用 mv composer.phar /usr/lo ...
- node设置跨域
开发过程中在build/dev-server.js配置相关代码以跨域 app.use('/api',proxyMiddleware({ target:'http://m.maizuo.com/v4', ...
- java输入最大10位数,倒数输出(很鸡肋)
public class D { public static void main(String[] args) { System.out.println("请输入数字(最大十位数):&quo ...
- Scrum Meeting博客汇总
葫芦娃不想写代码团队 Scrum Meeting博客汇总 一.Alpha阶段 [Alpha]Scrum Meeting 1 [Alpha]Scrum Meeting 2 [Alpha]Scrum Me ...
- springboot源码之(bean的递归注册)
在prepareContext中,用loader调用load方法,loader是 BeanDefinitionLoader,在BeanDefinitionLoader的构造方法中,会实例化一个Anno ...
- ant通配符
ANT通配符有三种: 通配符 说明 ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 例子: URL路径 说明 /app/*.x 匹配(Matches)所有在app路径下的 ...
- 互联网创业公司如何防御 DDoS 攻击?采用CDN服务
收集了发表于2015年 攻击者是控制一个足够大的分布式集群来发起攻击,各种杂七杂八的包,什么都会有.根本不在乎你开的什么服务,也没那耐心分析你有什么服务.比如哪怕你根本没开UDP的任何服务,但他就是发 ...
- web(七)css的语法规则、注释
css的语法规则:特殊的css语法标识. !important:当使用多种方式设定标签样式时,设定样式渲染的应用优先权,声明在取值之后. .important { color: red !import ...
- 洛谷 P1763 状态压缩dp+容斥原理
(题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...