BZOJ 3289: Mato的文件管理 (区间查询逆序对)
这道题就是不要求强制在线的 BZOJ 3744 Gty的妹子序列
所以说离线做法有莫队,在线做法见上面连接.
这里贴出常数巨大O(nnlogn)O(n\sqrt nlogn)O(nnlogn)分块+树状数组+主席树做法.
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的文件管理 (区间查询逆序对)的更多相关文章
- bzoj 3289 Mato的文件管理 区间逆序对数(离线) 莫队
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 思路 莫队+树状数组 注意离散化 Code #include <bits/stdc++.h&g ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Di ...
- BZOJ 3289 Mato的文件管理(莫队+离散化求逆序数)
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 2171 Solved: 891 [Submit][Status][ ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- BZOJ 3289: Mato的文件管理
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2368 Solved: 971[Submit][Status][Di ...
- BZOJ 3289: Mato的文件管理 莫队+BIT
3289: Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的 ...
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3289 3289: Mato的文件管理 Time Limit: 40 Sec Memory ...
- bzoj 3289 Mato的文件管理 树状数组+莫队
Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 4325 Solved: 1757[Submit][Status][Discuss ...
随机推荐
- java23种设计模式之七: 观察者模式
一.应用背景 观察者模式又称为发布/订阅(Publish/Subscribe)模式,我们可以理解为:只有关注信公众号关注后才能收到信息 二.优.缺点 优点: 1.可以动态的改变对象的行为 缺点 ...
- *#【Python】【基础知识】【运算符】【Python的几类运算符】
Python的运算符分为以下几类: 算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符 以及需要考虑的:运算符优先级 一.算术运算符: 需要注意的,上图是Python 2.0 ...
- multipart/form-data(二进制流) 两种传输方式
一.传统表单提交传输方式 <form id= "uploadForm" action= "url" method= "post" en ...
- HTNL基础之一
HTML:超文本标记语言 <-- 最好可以自己默写出来 --> <!DOCTYPE HTML> <html> <head> <title>& ...
- Pygame小游戏练习二
@Python编程从入门到实践 Python项目练习 四.创建Ship类 建立ship.py,创建Ship类,管理飞船行为. # ship.py import pygame class Ship(): ...
- S03_CH03_AXI_DMA_OV7725摄像头采集系统
S03_CH03_AXI_DMA_OV7725摄像头采集系统 3.1概述 本课程讲解如何搭建基于DMA的图形系统,方案原理如下. 摄像头采样图像数据后通过DMA送入到DDR,在PS部分产生DMA接收中 ...
- kubernetes kubeadm安装v1.14
1.我们这里准备两台Centos7的主机用于安装,后续节点可以根究需要添加即可:master node01两台都得改:cat /etc/hosts192.168.71.134 master192.16 ...
- MyBatis 源码篇-整体架构
MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...
- 关于vue项目的文件组织
最近参与了好几个项目,都是以vue-cli脚手架生成的项目,参与完成之后,有点关于项目文件组织的看法,很想聊聊. 关于目录 由vue-cli脚手架生成的项目,都会生成一个基本的目录格式. 类似于这种, ...
- eclipse 创建聚合maven项目(转)
转自https://blog.csdn.net/u013239111/article/details/76560167 以前我们搭建项目时,通常是吧pojo.dao.service.配置文件等都放在一 ...