BZOJ3289 Mato的文件管理(莫队算法+树状数组)
题目是区间逆序数查询。
莫队算法。。左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了。询问个数和数字个数都记为n,数字范围不确定所以离散化,这样时间复杂度就是$O(n^{\frac32}\log{n})$
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 55555
int block;
struct Query{
int i,l,r;
bool operator<(const Query &q)const{
if(l/block==q.l/block) return r<q.r;
return l/block<q.l/block;
}
}que[MAXN]; int bit[MAXN],N;
inline int lowbit(int x){
return x&(-x);
}
void update(int x,int k){
while(x<=N){
bit[x]+=k;
x+=lowbit(x);
}
}
int query(int x){
if(x<=) return ;
int res=;
while(x){
res+=bit[x];
x-=lowbit(x);
}
return res;
} int b[MAXN],bn,res,tot;
void insertR(int i){
i=lower_bound(b+,b++bn,i)-b;
res+=tot-query(i);
update(i,);
++tot;
}
void removeR(int i){
i=lower_bound(b+,b++bn,i)-b;
res-=tot-query(i);
update(i,-);
--tot;
}
void insertL(int i){
i=lower_bound(b+,b++bn,i)-b;
res+=query(i-);
update(i,);
++tot;
}
void removeL(int i){
i=lower_bound(b+,b++bn,i)-b;
res-=query(i-);
update(i,-);
--tot;
}
int a[MAXN],ans[MAXN];
int main(){
int n,m;
scanf("%d",&n);
block=(int)sqrt(n);
for(int i=; i<=n; ++i){
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+,b++n);
bn=unique(b+,b++n)-b-;
N=bn;
scanf("%d",&m);
for(int i=; i<m; ++i){
que[i].i=i;
scanf("%d%d",&que[i].l,&que[i].r);
}
sort(que,que+m);
int l=,r=; insertR(a[]);
for(int i=; i<m; ++i){
while(l<que[i].l) removeL(a[l++]);
while(l>que[i].l) insertL(a[--l]);
while(r>que[i].r) removeR(a[r--]);
while(r<que[i].r) insertR(a[++r]);
ans[que[i].i]=res;
}
for(int i=; i<m; ++i){
printf("%d\n",ans[i]);
}
return ;
}
BZOJ3289 Mato的文件管理(莫队算法+树状数组)的更多相关文章
- 【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 ...
- 【bzoj3289】Mato的文件管理 离散化+莫队算法+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6805224.html 题目描述 Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份 ...
- BZOJ 3289:Mato的文件管理(莫队算法+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题意:…… 思路:求交换次数即求逆序对数.确定了这个之后,先离散化数组.然后在后面插入元素的话 ...
- BZOJ3289【莫队算法+树状数组+离散化】
思路: 区间逆序数即是交换次数. 逆序数,可以用树状数组吧. 怎么处理区间变换的时候求逆序数啊.. 这里分成左边的增/删,右边的增/删 因为是按时序插入, 所以左边增,增一个数,计算:ans+=sun ...
- HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- HDU-6534-Chika and Friendly Pairs (莫队算法,树状数组,离散化)
链接: https://vjudge.net/contest/308446#problem/C 题意: Chika gives you an integer sequence a1,a2,-,an a ...
- 【BZOJ】3289: Mato的文件管理(莫队算法+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3289 很裸的莫队... 离线了区间然后分块排序后,询问时搞搞就行了. 本题中,如果知道$[l, r] ...
- BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
随机推荐
- Java中的构造函数和重载
一.Java中的构造函数 构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字.构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身.构造函数定义后,创 ...
- rails命令避免直接操作数据库
文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 今天在数据库里新增人员的时候出了点小问题,有人员重复了,以至于要删除一些,大师和pp指导完成的. $r ...
- C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很 ...
- HLG1744组合数学问题与lucas定理运用
The figure below shows Pascal's Triangle: Baby H divides Pascal's Triangle into some Diagonals, like ...
- poj2996 模拟
Help Me with the Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3713 Accepted: ...
- puppet 安装
yum源配置 1. wget http://ftp.kaist.ac.kr/fedora//epel/6/i386/epel-release-6-8.noarch.rpm 2. yum list | ...
- 【Other】推荐点好听的钢琴曲
2013-12-13 16:19 匿名 | 浏览 138977 次 音乐钢琴 推荐点好听的钢琴曲,纯音乐也可以thanks!!! 2013-12-14 19:34 网友采纳 热心网友 巴洛克:帕海贝尔 ...
- Meta Programming
[本文链接] http://www.cnblogs.com/hellogiser/p/meta-programming.html [分析] Template Mataprogram,中文叫模板元编程. ...
- Kmin
Kmin of Array [本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array.html [代码] C++ Code 12345678 ...
- 父页面刷新 保持iframe页面url不变
思路:点击父页面时写cookies-->刷新时从cookies中奖内容读取出来. 本文转自:http://blog.163.com/sdolove@126/blog/static/1146378 ...