【bzoj3289】mato的文件管理
首先允许离线,一眼莫队……
然后考虑对于每次移动,这不就是让你求逆序对嘛(QAQ)
考虑怎么移动?
- 每次在最后添加一个数,比这个数大的数都会与其形成一个逆序对
- 每次在最后移除一个数,比这个数大的数都会与其形成一个逆序对
- 每次在最前添加一个数,比这个数小的数都会与其减少一个逆序对
- 每次在最前移除一个数,比这个数小的数都会与其减少一个逆序对
那么每次移动的时候我拿树状数组查询一下就好,注意要离散化。
#include<bits/stdc++.h>
#define N 50005
#define inf 1000000007
using namespace std;
typedef unsigned int uint;
uint ans[N],now;
int n,m,a[N],b[N],rt[N];
int c[*N];
struct Query{int l,r,id;}q[*N];
inline int lowbit(int x){return x&(-x);}
bool operator<(Query x,Query y){
if(rt[x.l]==rt[y.l])return x.r<y.r;
return rt[x.l]<rt[y.l];
}
inline void add(int x,int val){
for(int i=x;i<=n;i+=lowbit(i))c[i]+=val;
}
uint ask(int x){
uint ans=;
for(int i=x;i;i-=lowbit(i))ans+=c[i];
return ans;
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();int x=(int)sqrt(n);
for(int i=;i<=n;i++)a[i]=read(),b[i]=a[i];
sort(b+,b+n+);
for(int i=;i<=n;i++)a[i]=lower_bound(b+,b+n+,a[i])-b;
m=read();
for(int i=;i<=m;i++)q[i].l=read(),q[i].r=read(),q[i].id=i;
for(int i=;i<=n;i++)rt[i]=(i-)/x+;
sort(q+,q+m+);
int l=,r=;
for(int i=;i<=m;i++){
while(l<q[i].l)add(a[l],-),now-=ask(a[l]-),l++;
while(r>q[i].r)add(a[r],-),now-=r-l-ask(a[r]),r--;
while(l>q[i].l)l--,add(a[l],),now+=ask(a[l]-);
while(r<q[i].r)r++,add(a[r],),now+=r-l+-ask(a[r]);
ans[q[i].id]=now;
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}
【bzoj3289】mato的文件管理的更多相关文章
- 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...
- [bzoj3289]Mato的文件管理_莫队_树状数组
Mato的文件管理 bzoj-3289 题目大意:给定一个n个数的序列.m次询问:一段区间中的逆序对个数. 注释:$1\le n\,mle 5\cdot 10^4$. 想法: 开始想这个题的大佬们,给 ...
- BZOJ3289 Mato的文件管理 【莫队 + 树状数组】
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 3964 Solved: 1613 [Submit][Status] ...
- [bzoj3289]Mato的文件管理
Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能 ...
- BZOJ3289 Mato的文件管理(莫队+树状数组)
这个做法非常显然. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...
- BZOJ3289 Mato的文件管理(莫队算法+树状数组)
题目是区间逆序数查询. 莫队算法..左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了.询问个数和数字个数都记为n,数字范围不确定所以离散化,这 ...
- bzoj3289 Mato的文件管理 莫队+树状数组
求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...
- 【莫队算法】bzoj3289 Mato的文件管理
莫队算法,离线回答询问,按一定大小(sqrt(n*log(n))左右)将答案分块,按 ①左端点所在块②右端点 双关键字排序. 然后暴力转移. 转移的时候用树状数组. O(n*sqrt(n)*log(n ...
- 【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 ...
随机推荐
- (原创)像极了爱情的详解排序二叉树,一秒get
排序二叉树(建立.查找.删除) 二叉树我们已经非常熟悉了,但是除了寻常的储存数据.遍历结构,我们还能用二叉树做什么呢? 我们都知道不同的遍历方式会对相同的树中产生不同的序列结果,排序二叉树就是利用二叉 ...
- 剑指offer-二叉树的镜像18
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...
- Week1 Team Homework #1 from Z.XML-对于学长项目《shield star》的思考和看法
试用了一下学长黄杨等人开发的<shield star>游戏. 其实作为一个学弟,我对cocos2d-x引擎还算是比较了解,所以对于这样一款很“典型 ...
- 对TDD的实践感悟
文章:我的TDD实践:可测试性驱动开发(上) 文章表达的思想是,达到一个目的并非只有一种套路,作者用写代码时,时刻考虑代码的可测试性,来推动项目的合理开发.
- select2赋值需要注意
$('#mySelect2').val(data.id).trigger('change'); 需要在赋值后,调用下change事件,不然的话展示值的span不会显示select最新的选中值.
- JAVA课程设计——植物大战僵尸(团队)
1.团队名称.团队成员介绍 团名:嗷嗷嗷嗷嗷 吴军霖(组长) 写得一手好代码也改得一手好bug 代码整洁好看源于强迫症 大概没有什么不会的东西叭 真正的王者段位 欧阳震霆(组员) 同样擅长写代码 在青 ...
- JVM高级内存优化面试
Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. JVM内存分布程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指 ...
- IDEA里面添加lombok插件,编写简略风格Java代码
在 java平台上,lombok 提供了简单的注解的形式来帮助我们消除一些必须有但看起来很臃肿的代码, 比如属性的get/set,及对象的toString等方法,特别是相对于 POJO; 关于lomb ...
- 【bzoj1123】[POI2008]BLO DFS树
题目描述 Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. 输入 输入n<=100000 ...
- zTree删除节点
zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. zTree删除节点. <!DOCTYPE html> &l ...