bzoj3744: Gty的妹子序列 (BIT && 分块)
强制在线的区间询问逆序对数
如果不是强制在线
就是可以用莫队乱搞啦
强制在线的话
用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 && 分块)的更多相关文章
- BZOJ3744 Gty的妹子序列(分块+树状数组)
题意 询问区间内逆序对数 强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...
- BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec Memory ...
- 【分块】【树状数组】bzoj3744 Gty的妹子序列
离散化,分块. 预处理出:ans[i][j] 第i块到第j块的逆序对数. f[i][j] 第1~i块中大于j的数的个数. g[i][j] 第1~j块中小于j的数的个数. 每次询问时对于整块部分可以O( ...
- bzoj3744 Gty的妹子序列
我是萌萌的传送门 感觉这题还是不错的--虽然其实算是比较水的题= = 首先分块,令f[i][j]表示第i块到第j块的逆序对数,询问的时候直接计算不完整块与完整块以及不完整块之间的逆序对. 不完整块之间 ...
- 【BZOJ3744】Gty的妹子序列 分块+树状数组
[BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...
- BZOJ 3744 Gty的妹子序列 (分块 + BIT)
3744: Gty的妹子序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1931 Solved: 570[Submit][Status][Dis ...
- bzoj 3744: Gty的妹子序列 主席树+分块
3744: Gty的妹子序列 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 101 Solved: 34[Submit][Status] Descr ...
- 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
随机推荐
- 任意指定一个key获取该key所处在哪个node节点
需求:任意指定一个key获取该key所处在哪个node节点上. 说明:redis自带的命令可以知道一个key所属的slot,可以知道node master对应哪些slot,但没有key和node的对应 ...
- 网站后门shell-----eval
我们先来看看网站被攻击的代码: <?php error_reporting(E_ERROR); unlink('user.php'); unlink('../member/login.php') ...
- 0010 基于DRF框架开发(03 模型序列化器)
序列化器:是指从数据库提取数据,转化前端所需要的数据格式并返回到前端. 反序列化器:是指把前端传回的数据,转换成数据库需要的格式,存入数据库. DRF提供了两种序列化器: 模型序列化器:是指和模型关联 ...
- win10中安装与配置maven
原文链接:https://www.cnblogs.com/wkrbky/p/6350334.html Maven安装配置(Windows10) 想要安装 Apache Maven 在Windows 系 ...
- C# WPF过渡效果实现(C# WPF Material Design UI: Transitions)
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- 直观获取redis cluster 主从关系
需求:还是redis-trib.rb脚本获取的信息不足或者太繁杂,这里给出更加直观的一种方法, 说明:已在4.x版本测试通过,3.x不可用. 原生的输出 (1adfa7f3...) keys slot ...
- (ubuntu系统)安装opencv-python后,报错libSM.so.6: cannot open shared object file: No such file or directory
这是我在 用云服务器跑python代码时候 遇到的问题 卡在这好长时间...希望对同样遇到这样窘境的小白们有所帮助 在控制台界面下,找不到cv2,,,, 解决办法 步骤一: 输入 sudo pass ...
- 如何查看oracle当前连接数,会话数
第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes NA ...
- python3.6安装lxml库
好像是在python3.5之后,安装了lxml也无法使用etree 为了就解决这个问题使用如下方法: 1.下载lxml的wheel文件,下载地址:https://www.lfd.uci.edu/~go ...
- 测试用例与PUCCH