BZOJ3289【莫队算法+树状数组+离散化】
思路:
区间逆序数即是交换次数。
逆序数,可以用树状数组吧。
怎么处理区间变换的时候求逆序数啊。。
这里分成左边的增/删,右边的增/删
因为是按时序插入,
所以左边增,增一个数,计算:ans+=sun(cur_val-1)[比他小的数的个数]
那么删:删一个数,计算ans+=sun(cur_val-1)[比他小的数的个数]
右边增的话,赠一个数,是ans+=比该值大的数的个数,那也就是ans+=区间-比他小的个数
删除同理。
补:
突然意识到莫队的每次增加区间点都意味着这个点之前所造成的贡献/效果要先删除,
然后更新这个点,
计算这个点更新后造成的贡献/效果。
而这里的话,一个点给出的效果已经知道。
WA在了树状数组算数组元素v[i]前缀和,应该是sum(v[i]-1);
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII; const int N=5e4+10;
int c[N*4],n,q;
int pos[N],v[N];
vector<int>xs;
struct asd
{
int left,right,res,id;
} e[N];
bool cmp(asd x,asd y)
{
if(pos[x.left]==pos[y.left]) return x.right<y.right;
return x.left<y.left;
}
bool cmp_id(asd x,asd y)
{
return x.id<y.id;
} int lowbit(int x)
{
return x&(-x);
}
void add(int x,int val)
{
while(x<N)
{
c[x]+=val;
x+=lowbit(x);
}
} int sum(int i)
{
int ans=0;
while(i)
{
ans+=c[i];
i-=lowbit(i);
}
return ans;
} int ans;
int solve()
{
memset(c,0,sizeof(c));
ans=0;
for(int i=0,L=1,R=0; i<q; i++)
{
while(R<e[i].right)//右增;
{
add(v[R+1],1);
ans+=R+1-L+1-sum(v[R+1]);//区间-比他小的数-他本身的数。
R++;
}
while(R>e[i].right)//右缩
{
ans-=R-L+1-sum(v[R]);//区间-比他小的数-他本身的数。
add(v[R],-1);
R--;
}
while(L<e[i].left)//左缩
{
ans-=sum(v[L]-1);
add(v[L],-1);
L++;
}
while(L>e[i].left)//左扩
{
add(v[L-1],1);
ans+=sum(v[L-1]-1);
L--;
}
e[e[i].id].res=ans;
}
} int main()
{
scanf("%d",&n);
int block=(int)sqrt(n);
for(int i=1; i<=n; i++)
{
scanf("%d",&v[i]);
xs.push_back(v[i]);
pos[i]=(i-1)/block+1;
}
sort(xs.begin(),xs.end());
for(int i=1;i<=n;i++)
v[i]=lower_bound(xs.begin(),xs.end(),v[i])-xs.begin()+1;
scanf("%d",&q);
for(int i=0; i<q; i++)
{
scanf("%d%d",&e[i].left,&e[i].right);
e[i].id=i;
}
sort(e,e+q,cmp);
solve();
for(int i=0; i<q; i++)
printf("%d\n",e[i].res);
return 0;
}
/*
4
1 4 2 3
2
1 2
2 4
5
9 8 5 3 2
1 */
BZOJ3289【莫队算法+树状数组+离散化】的更多相关文章
- HDU-6534-Chika and Friendly Pairs (莫队算法,树状数组,离散化)
链接: https://vjudge.net/contest/308446#problem/C 题意: Chika gives you an integer sequence a1,a2,-,an a ...
- 【bzoj3289】Mato的文件管理 离散化+莫队算法+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6805224.html 题目描述 Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份 ...
- BZOJ3289 Mato的文件管理(莫队算法+树状数组)
题目是区间逆序数查询. 莫队算法..左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了.询问个数和数字个数都记为n,数字范围不确定所以离散化,这 ...
- 【BZOJ3289】Mato的文件管理 莫队算法+树状数组
[BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...
- 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 ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- BZOJ 3289:Mato的文件管理(莫队算法+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题意:…… 思路:求交换次数即求逆序对数.确定了这个之后,先离散化数组.然后在后面插入元素的话 ...
- 【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 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
随机推荐
- 使用Apache Commons Chain(转载)
原博客出处:http://phil-xzh.iteye.com/blog/321536 使用Commons Chain 作为程序开发人员,我们经常需要对一个实际上程序性的系统应用面向对象的方法.商业分 ...
- Tomcat Context 组件介绍(转载)
来源:http://diecui1202.iteye.com/blog/1037370 Context代表一个Web应用,它运行在某个指定的虚拟主机(Host)上:每个Web应用都是一个WAR文件,或 ...
- 美拍、秒拍中安卓、IOS短视频拍摄的一些关键技术
在发布<EasyDarwin开发出类似于美拍.秒拍的短视频拍摄SDK:EasyVideoRecorder>后,今天有人问到像美拍.秒拍这些短视频拍摄是怎么做到的,包括其中的一些功能,例如: ...
- mongodb学习之:数据库
首先来介绍下Mongodb的基本概念: 左边一列是关系数据库的术语,右边这一列是NOSQL也就是mongodb的术语 database: database 数据库 tabl ...
- jQuery——能够编辑的表格
版权声明:欢迎转载,请注明出处 https://blog.csdn.net/suneqing/article/details/26856635 今天学习了利用jQuery实现能够编辑的表格这个 ...
- CALayer的隐式动画
CALayer的使用 在我的理解中CALayer就是iOS中利用图层精简非交互式绘图.那么那些核心动画类.也就是变化图层的非交互式绘制规则而已.其中的本质就是将CALayer中的内容转化为map图.从 ...
- undefined reference to '__android_log_print'解决方案
1:在源程序中添加头文件 #include <cutils/log.h> 2:在Android.mk中添加 LOCAL_SHARED_LIBRARIES := \ libutils \ l ...
- Understand .sync in Vue
Preface The first time I met .sync modifier, I didn't know it very well. So, I seldom use that. Toda ...
- Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 字符串
题目链接:http://codeforces.com/contest/777/problem/D 题解: 题意:给出n行字符串,对其进行字典序剪辑.我自己的想法是正向剪辑的,即先对第一第二个字符串进行 ...
- 一看就会,科目三靠边停车30cm技巧!再也不怕不会停车了!
靠边停车是科目三考试的最后一关,如果在这一关失败,那之前所有的努力都功亏一篑了,你感觉吃不吃亏?就连我们自己平时开车,轮胎万一与路边石阶刮蹭,就会造成不小的伤害.那么靠边停车时有哪些注意要点呢?请和小 ...