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

如果不是强制在线

就是可以用莫队乱搞啦

强制在线的话

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

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

离散化一下

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

下面是代码

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cmath>
 4 #include <cstring>
 5 using namespace std;
 6 #define isdigit(x) (x <= '9' && x >= '0')
 7 #define lowbit(x) (x & (-x))
 8 const int N = 5e4 + 5;
 9 const int M = 300;
10
11 struct s {
12     int u, v;
13     inline bool operator < (const s &o) const {
14         return u < o.u;
15     }
16 } a[N];
17
18 inline void read(int &ans) {
19     ans = 0;
20     static char buf = getchar();
21     for (; !isdigit(buf); buf = getchar());
22     for (; isdigit(buf); buf = getchar())
23         ans = ans * 10 + buf - '0';
24 }
25
26 int n, cnt, maxn, sz;
27 int s[M][N], f[M][N], c[N], d[N], b[N];
28
29 inline void add(int x, int a) {
30     while (x <= maxn) {
31         c[x] += a;
32         x += lowbit(x);
33     }
34 }
35
36 inline int query(int x) {
37     int ans = 0;
38     while (x > 0) {
39         ans += c[x];
40         x -= lowbit(x);
41     }
42     return ans;
43 }
44
45 inline void work(int x) {
46     int h = (x - 1) * sz + 1;
47     int t = x * sz;
48     for (int i = h; i <= n; i++)
49         add(d[i], 1), f[x][i] = f[x][i - 1] + i - h + 1 - query(d[i]);
50     memset(c, 0, sizeof(c));
51     for (int i = h; i <= t; i++)    s[x][d[i]]++;
52     for (int i = 1; i <= maxn; i++)    s[x][i] += s[x][i - 1];
53     for (int i = 1; i <= maxn; i++)    s[x][i] += s[x - 1][i];
54 }
55
56 int main() {
57     read(n);
58     sz = sqrt(n);
59     for (int i = 1; i <= n; i++) {
60         read(a[i].u); a[i].v = i;
61         b[i] = (i - 1) / sz + 1;
62     }
63     cnt = b[n];
64     sort(a + 1, a + n + 1);
65     int last = 1; d[a[1].v] = 1;
66     for (int i = 2; i <= n; i++) {
67         if (a[i].u == a[i - 1].u)    d[a[i].v] = last;
68         else    d[a[i].v] = ++last;
69     }
70     maxn = last;
71     for (int i = 1; i <= cnt; i++)
72         work(i);
73     int m; read(m);
74     int ans = 0;
75     while (m--) {
76         int l, r;
77         read(l); read(r);
78         l = l ^ ans; r = r ^ ans;
79         ans = 0;
80         if (l > r)    swap(l, r);
81         if (b[l] == b[r]) {
82             for (int i = l; i <= r; i++)
83                 add(d[i], 1), ans += i - l + 1 - query(d[i]);
84             for (int i = l; i <= r; i++)    add(d[i], -1);
85         }
86         else {
87             ans = f[b[l] + 1][r];
88             for (int i = (b[r] - 1) * sz + 1; i <= r; i++)    add(d[i], 1);
89             for (int i = b[l] * sz; i >= l; i--)
90                 add(d[i], 1), ans += query(d[i] - 1) + s[b[r] - 1][d[i] - 1] - s[b[l]][d[i] - 1];
91             for (int i = (b[r] - 1) * sz + 1; i <= r; i++)    add(d[i], -1);
92             for (int i = l; i <= b[l] * sz; i++)    add(d[i], -1);
93         }
94         printf("%d\n", ans);
95     }
96 }

转载于:https://www.cnblogs.com/cminus/p/8571228.html

bzoj3744: Gty的妹子序列 (BIT 分块)相关推荐

  1. bzoj3744 Gty的妹子序列

    3744: Gty的妹子序列 Time Limit: 20 Sec   Memory Limit: 128 MB Submit: 967   Solved: 293 [ Submit][ Status ...

  2. #BZOJ3744 GTY的妹子序列

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

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

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

  4. BZOJ3809: Gty的二逼妹子序列

    BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...

  5. [BZOJ3809]Gty的二逼妹子序列

    [BZOJ3809]Gty的二逼妹子序列 试题描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽 ...

  6. P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P4867 题目大意 一个序列要求支持询问一个区间[l,r][l,r][l,r]内在[a,b][a,b][a,b]之间 ...

  7. 【bzoj3089】gty的二逼妹子序列

    一眼又是个莫队-- 首先看这时间/空间复杂度,线段树/主席树就别想了-- 然后么--zcy就有点傻了-- 于是zcy看了下hzwer,感觉受教育了. 分块的调块大小真是玄学设计. 有没有一种方法在修改 ...

  8. BZOJ 3720: Gty的妹子树 [树上size分块]

    传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...

  9. 洛谷T46780 ZJL 的妹子序列(生成函数)

    题面 传送门 题解 这居然是一道语文题? 首先不难看出,因为每一次相邻元素交换最多减少一个逆序对,所以至少\(m\)次交换就代表这个序列的逆序对个数为\(m\) 我们考虑一下,假设现在已经放完了\(i ...

最新文章

  1. 择天记手游的服务器维护世界,1130停服更新公告
  2. java线程太多卡顿_性能优化之卡顿延迟
  3. windows2003添加普通用户的远程桌面权限
  4. GPU云服务器深度学习性能模型初探
  5. 数据库只有mdf文件而没有ldf文件,如何恢复数据库
  6. 大规模图嵌入 示例_ICLR 2020 | 基于谱方法的高效多级图嵌入框架
  7. Spring+SpringMVC+maven使用@aspectJ添加切面
  8. Community Server Resources
  9. python 构造http请求对象-Request对象
  10. SpringMVC初写(四)上传和下载功能的实现
  11. 28 《暗时间》 -豆瓣评分8.4
  12. 前端笔记 -- 不重复造轮子(遇到就更新内容)
  13. 【离散数学】单射、满射、双射、映射的合成与逆映射
  14. 检测号码是否开通微信如何做?
  15. 计算机毕业设计ssm东湖爱心系统的众筹设计和实现t4a84系统+程序+源码+lw+远程部署
  16. 生成式对抗网络(GAN)实战——书法字体生成练习赛
  17. 山西最新道路运输安全员模拟真题集及答案解析
  18. 公众号运营引流月吸万粉之互推
  19. Java更改 PDF 页面大小
  20. ChatGPT能完全取代软件开发吗,看看它怎么回答?

热门文章

  1. Java-Android【2】-弹出对话框
  2. [jQuery]回到顶部
  3. 《Effective C#》Item 14:使用构造函数初始化语句
  4. git进阶(撤销pull、撤销merge、撤销add)
  5. 最近在搞react redux react-router等,
  6. HIT Software Construction Review Notes(0-1 Introduction to the Course)
  7. JavaScript学习(八十五)—数据类型的转换
  8. 报错:Unchecked runtime.lastError:Could not establish connection. Receiving end does not exist.
  9. 一个没有担当的领导,通常会有哪些表现?
  10. 宇宙大爆炸是不是一个黑洞的大爆炸?