强制在线的区间询问逆序对数

如果不是强制在线

就是可以用莫队乱搞啦

强制在线的话

用f[i][j]记录第i块到第j个点之间的逆序对数

用s[i][j]记录前i块中小于等于j的数字个数

离散化一下

BIT用来处理需要暴力的地方即可

下面是代码

 #include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
#define isdigit(x) (x <= '9' && x >= '0')
#define lowbit(x) (x & (-x))
const int N = 5e4 + ;
const int M = ; struct s {
int u, v;
inline bool operator < (const s &o) const {
return u < o.u;
}
} a[N]; inline void read(int &ans) {
ans = ;
static char buf = getchar();
for (; !isdigit(buf); buf = getchar());
for (; isdigit(buf); buf = getchar())
ans = ans * + buf - '';
} int n, cnt, maxn, sz;
int s[M][N], f[M][N], c[N], d[N], b[N]; inline void add(int x, int a) {
while (x <= maxn) {
c[x] += a;
x += lowbit(x);
}
} inline int query(int x) {
int ans = ;
while (x > ) {
ans += c[x];
x -= lowbit(x);
}
return ans;
} inline void work(int x) {
int h = (x - ) * sz + ;
int t = x * sz;
for (int i = h; i <= n; i++)
add(d[i], ), f[x][i] = f[x][i - ] + i - h + - query(d[i]);
memset(c, , sizeof(c));
for (int i = h; i <= t; i++) s[x][d[i]]++;
for (int i = ; i <= maxn; i++) s[x][i] += s[x][i - ];
for (int i = ; i <= maxn; i++) s[x][i] += s[x - ][i];
} int main() {
read(n);
sz = sqrt(n);
for (int i = ; i <= n; i++) {
read(a[i].u); a[i].v = i;
b[i] = (i - ) / sz + ;
}
cnt = b[n];
sort(a + , a + n + );
int last = ; d[a[].v] = ;
for (int i = ; i <= n; i++) {
if (a[i].u == a[i - ].u) d[a[i].v] = last;
else d[a[i].v] = ++last;
}
maxn = last;
for (int i = ; i <= cnt; i++)
work(i);
int m; read(m);
int ans = ;
while (m--) {
int l, r;
read(l); read(r);
l = l ^ ans; r = r ^ ans;
ans = ;
if (l > r) swap(l, r);
if (b[l] == b[r]) {
for (int i = l; i <= r; i++)
add(d[i], ), ans += i - l + - query(d[i]);
for (int i = l; i <= r; i++) add(d[i], -);
}
else {
ans = f[b[l] + ][r];
for (int i = (b[r] - ) * sz + ; i <= r; i++) add(d[i], );
for (int i = b[l] * sz; i >= l; i--)
add(d[i], ), ans += query(d[i] - ) + s[b[r] - ][d[i] - ] - s[b[l]][d[i] - ];
for (int i = (b[r] - ) * sz + ; i <= r; i++) add(d[i], -);
for (int i = l; i <= b[l] * sz; i++) add(d[i], -);
}
printf("%d\n", ans);
}
}

bzoj3744: Gty的妹子序列 (BIT && 分块)的更多相关文章

  1. BZOJ3744 Gty的妹子序列(分块+树状数组)

    题意 询问区间内逆序对数  强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...

  2. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec  Memory ...

  3. 【分块】【树状数组】bzoj3744 Gty的妹子序列

    离散化,分块. 预处理出:ans[i][j] 第i块到第j块的逆序对数. f[i][j] 第1~i块中大于j的数的个数. g[i][j] 第1~j块中小于j的数的个数. 每次询问时对于整块部分可以O( ...

  4. bzoj3744 Gty的妹子序列

    我是萌萌的传送门 感觉这题还是不错的--虽然其实算是比较水的题= = 首先分块,令f[i][j]表示第i块到第j块的逆序对数,询问的时候直接计算不完整块与完整块以及不完整块之间的逆序对. 不完整块之间 ...

  5. 【BZOJ3744】Gty的妹子序列 分块+树状数组

    [BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...

  6. BZOJ 3744 Gty的妹子序列 (分块 + BIT)

    3744: Gty的妹子序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1931  Solved: 570[Submit][Status][Dis ...

  7. bzoj 3744: Gty的妹子序列 主席树+分块

    3744: Gty的妹子序列 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 34[Submit][Status] Descr ...

  8. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  9. BZOJ 3744 Gty的妹子序列

    Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...

随机推荐

  1. Spark学习之路 (九)SparkCore的调优之数据倾斜调优[转]

    调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...

  2. gulp常用插件之gulp-beautify使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-beautify这是一款使用js-beautify进行资产美化插件. 更多使用文档请点击访问gulp-beautify工具官网. 安装 ...

  3. JZOJ5988 珂学计树题

    题意 liu_runda曾经是个喜欢切数数题的OIer,往往看到数数题他就开始刚数数题.于是liu_runda出了一个数树题.听说OI圈子珂学盛行,他就在题目名字里加了珂学二字.一开始liu_rund ...

  4. 2.Docker Compose 部署应用程序

    部署 Tomcat version: '3.1' services:  tomcat:   restart: always   image: tomcat   container_name: tomc ...

  5. 你这是virus吧?

    谁在我的vps上跑了这个?我的备份终于起一定作用了. GO declare @sql varchar(8000) while (select count(*) from sysobjects wher ...

  6. laravle中orm简单的增删改查

    友情提示请在有laravel基础的情况下观看文章 1.数据库信息(user表) CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...

  7. host文件无写权限时,怎么设置

    点击文件属性---安全---选择对应的用户---编辑属性---勾选需要的属性---应用---确定

  8. sap gui中打断点,进入不了断点

    1: 当abap development tool 打开时,会影响sap gui中的断点进入. 2: 需要sap gui和abap development tool  都关闭,重新进入sap gui打 ...

  9. 记录 Docker 的学习过程 (dockerfile自动制作镜像)

    自动制作镜像 通过编写dockerfile来自动创建镜像 #vi Dockerfile #编辑dockerfile文件,一定要以这个名字命名 #cat Dockerfile #导入哪个基础镜像FROM ...

  10. C++中局部变量的返回

    在写 “根据中序和后序遍历顺序,构建树的问题” 时,原本这只是一个非常简单的问题,但是突然发现一直有错误.代码如下: node* get_root(int x1, int x2, int y1, in ...