Mato的文件管理 (莫队)题解
思路:
莫队模板题,转换几次就是找逆序数,用树状数组来储存数就行了
注意要离散化
代码:
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
const int N = 50000+5;
using namespace std;
int k[N],p[N],arr[N],pos[N],ans[N],n,m;
struct node{
int l,r;
int id;
}e[N];
bool cmp(node a,node b){
return pos[a.l] == pos[b.l]? a.r < b.r : pos[a.l] < pos[b.l];
}
int lowbit(int x){
return x&(-x);
}
void update(int x,int val){
for(int i = x;i <= n;i += lowbit(i))
arr[i] += val;
}
int sum(int x){
int ret = 0;
for(int i = x;i > 0;i -= lowbit(i)){
ret += arr[i];
}
return ret;
}
void Do(){
//i位置
//L右移,逆序对数减少p[i]的逆序数
//L左移,逆序对数增加p[i-1]的逆序数
//R右移,逆序对数增加大于p[i+1]的数
//R左移,逆序对数减少大于p[i]的数
int L = 1,R = 0;
int ret = 0;
for(int i = 1;i <= m;i++){
while(L < e[i].l){
update(p[L],-1);
ret -= sum(p[L] - 1);
L++;
}
while(L > e[i].l){
L--;
update(p[L],1);
ret += sum(p[L] - 1);
}
while(R < e[i].r){
R++;
update(p[R],1);
ret += R - L + 1 - sum(p[R]); //大于减去自己和比己小的
}
while(R > e[i].r){
update(p[R],-1);
ret -= R - L -sum(p[R]);
R--;
}
ans[e[i].id] = ret;
}
}
int main(){
scanf("%d",&n);
int block = sqrt(n);
for(int i = 1;i <= n;i++){
scanf("%d",&p[i]);
k[i] = p[i];
pos[i] = (i - 1) / block + 1;
}
sort(k+1,k+n+1);
for(int i = 1;i <= n;i++) p[i] = lower_bound(k+1,k+n+1,p[i]) - k;
scanf("%d",&m);
for(int i = 1;i <= m;i++){
scanf("%d%d",&e[i].l,&e[i].r);
e[i].id = i;
}
sort(e+1,e+m+1,cmp); //分块
Do();
for(int i =1;i <= m;i++)
printf("%d\n",ans[i]);
return 0;
}
Mato的文件管理 (莫队)题解的更多相关文章
- BZOJ 3289: Mato的文件管理 莫队+BIT
3289: Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的 ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Di ...
- 【BZOJ3289】Mato的文件管理 莫队算法+树状数组
[BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...
- 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 MB[Submit][Status][Discuss] Description Mato同学 ...
- BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化
描述 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...
- bzoj3289 Mato的文件管理 莫队+树状数组
求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...
- bzoj 3289 : Mato的文件管理 (莫队+树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3289 思路: 求区间最小交换的次数将区间变成一个不降序列其实就是求区间逆序对的数量,这 ...
- 【BZOJ3289】Mato的文件管理 莫队+树状数组
题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...
- bzoj 3289: Mato的文件管理 莫队+线段树
题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...
随机推荐
- android(五)----使用WakeLock使Android应用程序保持后台唤醒
在使用一些产品列如微信.QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了. 但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消 ...
- mysql 数据操作 多表查询 目录
mysql 数据操作 多表查询 准备 多表连接查询介绍 mysql 数据操作 多表查询 多表连接查询 笛卡尔积 mysql 数据操作 多表查询 多表连接查询 内连接 mysql 数据操作 多表查询 多 ...
- 混淆矩阵在Matlab中PRtools模式识别工具箱的应用
声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. 混淆矩阵是模式识别中的常用工具,在PRTools工具箱中有直接 ...
- windows环境下为php打开ssh2扩展
安装步骤 1. 下载 php extension ssh2下载地址 http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 根据自己PHP的 ...
- 使用客户端等远程连接mysql数据库
1: 远程数据库(D1)数据: 数据库用户:root,数据库密码:root,数据库ip 内网地址 192.168.100.91,数据库端口 3306 本地主机:ip 192.168.127.1 ...
- Selenium - Css Selector 使用方法
什么是Css Selector? Css Selector定位实际就是HTML的Css选择器的标签定位 工具 Css Selector可以下载火狐浏览器插件,FireFinder 或 FireBug和 ...
- mysql主从数据库不同步的2种解决方法 (转载)
今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; ...
- 016-sed
行处理:一次处理一行.正则选定文本 ----->>sed处理格式:一.命令行格式:sed [options] 'command' files(如果没有则是通过管道)1.options: - ...
- Ruby 对多语言的支持
这是一篇翻译文章,原文链接 http://blog.grayproductions.net/articles/understanding_m17n.原文是一个系列,翻译过来整合成了一篇文章,对文章内容 ...
- python函数里面,一个*是可变参数的元祖,两个*是可变参数的字典
python的函数中,有时会有类似*args,**keys这样的参数,代表的是可变参数,一个*表示元祖,两个*表示字典,就是说这个函数可以接受任何类型的参数,都不会报错,有些函数为了提高可用性,会加这 ...