这道题就是不要求强制在线的 BZOJ 3744 Gty的妹子序列

所以说离线做法有莫队,在线做法见上面连接.

这里贴出常数巨大O(nnlogn)O(n\sqrt nlogn)O(nn​logn)分块+树状数组+主席树做法.

CODE

#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
template<typename T>inline void read(T &num) {
char ch; int flg = 1;
while((ch=getchar())<'0'||ch>'9')if(ch=='-')flg=-flg;
for(num=0;ch>='0'&&ch<='9';num=num*10+ch-'0',ch=getchar());
num*=flg;
}
const int MAXN = 50005;
int n, m, N, B, f[225][MAXN], a[MAXN], b[MAXN], bel[MAXN]; int ch[MAXN*20][2], sz[MAXN*20], rt[MAXN], tot;
void insert(int &i, int p, int l, int r, int x) {
sz[i=++tot] = sz[p] + 1;
if(l == r) return;
int mid = (l + r) >> 1;
if(x <= mid) ch[i][1] = ch[p][1], insert(ch[i][0], ch[p][0], l, mid, x);
else ch[i][0] = ch[p][0], insert(ch[i][1], ch[p][1], mid+1, r, x);
} int query(int x, int y, int l, int r, int L, int R) {
if(sz[x] == sz[y]) return 0;
if(L <= l && r <= R) return sz[y]-sz[x];
int mid = (l + r) >> 1;
if(R <= mid) return query(ch[x][0], ch[y][0], l, mid, L, R);
else if(L > mid) return query(ch[x][1], ch[y][1], mid+1, r, L, R);
return query(ch[x][0], ch[y][0], l, mid, L, R) + query(ch[x][1], ch[y][1], mid+1, r, L, R);
} int T[MAXN]; inline void upd(int x, int val) {
while(x) T[x] += val, x -= x&-x;
}
inline int qsum(int x) { int res = 0;
while(x <= N) res += T[x], x += x&-x;
return res;
}
inline int solve(int L, int R) {
if(L > R) swap(L, R);
int res = 0;
if(bel[L] == bel[R]) {
for(int i = L; i <= R; ++i)
res += qsum(a[i]+1), upd(a[i], 1);
for(int i = L; i <= R; ++i) upd(a[i], -1);
return res;
}
res = f[bel[L]+1][R];
for(int i = L; i <= bel[L]*B && i < R; ++i)
res += query(rt[i], rt[R], 1, N, 1, a[i]-1);
return res;
} int main () {
read(n); B = sqrt(n);
for(int i = 1; i <= n; ++i) read(a[i]), b[++N] = a[i];
sort(b + 1, b + N + 1);
N = unique(b + 1, b + N + 1) - b - 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) {
bel[i] = (i-1)/B + 1;
insert(rt[i], rt[i-1], 1, N, a[i]);
}
for(int i = 1; i <= bel[n]; ++i) {
for(int j = (i-1)*B+1; j <= n; ++j)
f[i][j] = f[i][j-1] + qsum(a[j]+1), upd(a[j], 1);
memset(T, 0, (N+1)<<2);
}
int x, y;
read(m);
while(m--) {
read(x), read(y);
printf("%d\n", solve(x, y));
}
}

BZOJ 3289: Mato的文件管理 (区间查询逆序对)的更多相关文章

  1. bzoj 3289 Mato的文件管理 区间逆序对数(离线) 莫队

    题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 思路 莫队+树状数组 注意离散化 Code #include <bits/stdc++.h&g ...

  2. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1539  Solved: 665[Submit][Status][Di ...

  3. BZOJ 3289 Mato的文件管理(莫队+离散化求逆序数)

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 2171  Solved: 891 [Submit][Status][ ...

  4. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  5. BZOJ 3289: Mato的文件管理

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2368  Solved: 971[Submit][Status][Di ...

  6. BZOJ 3289: Mato的文件管理 莫队+BIT

    3289: Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的 ...

  7. bzoj 3289: Mato的文件管理 莫队+树状数组

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...

  8. BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3289 3289: Mato的文件管理 Time Limit: 40 Sec  Memory ...

  9. bzoj 3289 Mato的文件管理 树状数组+莫队

    Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 4325  Solved: 1757[Submit][Status][Discuss ...

随机推荐

  1. 【Python】【demo实验36】【基础实验】【求3*3矩阵的主对角线之和】

    题目: 求一个3*3矩阵主对角线元素之和. 主对角线:从左上多右下的书归为主对角线 副对角线:从左下至右上的数归为副对角线. 我的源码: #!/usr/bin/python # encoding=ut ...

  2. Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

    今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...

  3. 使用mybatis出现异常:invalid comparison: java.time.LocalDateTime and java.lang.String

    整了半天终于找到问题所在:在mapper文件中,对该参数进行了和字符串的对比,如下: <if test="startTime != null and startTime != '' a ...

  4. Scrapy payload 报错400

    首先Scrapy 发送payload请求格式如下: def start_requests(self): querystr = { "ctoken": "U-ang1zmp ...

  5. Redis 学习笔记(篇八):事件

    Redis 服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件: Redis 服务器通过套接字与客户端(或者其他 Redis 服务器)进行连接,而文件事件就是服务器对套接字操作的抽象.服 ...

  6. HDU 3461 思维+并查集

    Code Lock 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3461 Problem Description A lock you use has ...

  7. HDU 4417-Super Mario-线段树+离线

    Description Mario is world-famous plumber. His "burly" figure and amazing jumping ability ...

  8. fiddler笔记:TimeLine时间轴选项卡

    1.TimeLine选项卡介绍 TimeLine选项卡支持使用"瀑布"模型查看1~250个选中的Session.主要用于帮助性能分析和理解请求之间的关联.选项卡的主体内容是数据流视 ...

  9. xtrabackup原理,整库,单表,部分备份恢复

    物理备份xtrabackup原理 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...

  10. caffe笔记

    1. 训练    cifar10 示例 ① cd caffe.1.0.0 ./data/cifar10/get_cifar10.sh    #获取图片 ② ./examples/cifar10/cre ...