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

如果不是强制在线

就是可以用莫队乱搞啦

强制在线的话

用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. Chocolaty

    原文是用markdown格式写的,稍微改了下发了博客,格式可能会很奇怪.. Chocolaty官网 Chocolaty是一款Windows平台的包管理工具,类似于centos的yum或ubuntu的a ...

  2. 为什么文件无法用wps打开,甚至wps.exe本身都无法打开?

    原因: 我的wps.exe在目录 programme installation 中 如果我把目录改成 programmeInstallation 那么就会变成打不开的情况. 解决方法就是改回去. 怎么 ...

  3. mybatis插入嵌套对象

    今晚做项目遇上了一个需求,需要插入嵌套对象. 对象结构是这样的: public class RegisterMsg{ private  Header header; private short pro ...

  4. 小白的java学习之路 “ 带参数的方法”

    一.带参数的方法: 1.1 语法: <访问修饰符> 返回类型 <方法名>(<形式参数列表>) { //方法的主体 } 1.2 案例: 榨汁机 public clas ...

  5. codeforces 99999/553 Sultan's Pearls Solution 珍珠 题解

    文章目录 珍珠 题意 分析 增加限定条件 去掉限定条件 Code 珍珠 题意 一共n课珍珠,m颗悬挂,其余在桌子上.如图所示. 仆人每天从某一端"借"一颗珍珠珠.主人每天都会检查悬 ...

  6. Deep Clustering Algorithms

    Deep Clustering Algorithms 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 本文研究路线:深度自编码器(Deep Autoen ...

  7. 曼孚科技:AI领域3种典型的深度学习算法

    ​深度学习(Deep Learning)是机器学习(Machine Learning)领域中一个新的研究方向,引领了第三次人工智能的浪潮. 本文整理了深度学习领域3种典型的算法,希望可以帮助大家更好地 ...

  8. LAMP+discuz网站搭建过程

    LAMP+discuz网站的搭建 一. LAMP环境搭建 0x01下载配置虚拟机 网上下载centOS7 64的镜像,然后在vmware里面配置好,我配置的是linux终端桌面,运行快,占内存小. 0 ...

  9. Win10安装1 —— 引言与目录

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12368107.html 一:引言 众所周知,电脑出现问题了后,重启 可以解决90 ...

  10. sqlserver删除所有表、视图、存储过程

    declare proccur cursor     for         select [name] from sysobjects where type='P' declare @procnam ...