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 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
随机推荐
- linux下启动和关闭weblogic(转载)
在weblogic定义的域中可以找到如下命令: /[youHome]/domains/[yourDomain]/startWebLogic.sh /[youHome]/domains/[yourDom ...
- 基于UDP的一对回射客户/服务器程序
前言 之前曾经学习过一对回射客户/服务器程序的例子,不过那个是基于TCP协议的.本文将讲解另一对回射客户/服务器程序,该程序基于UDP协议.由于使用的协议不同,因此编写出的程序也有本质上的区别,应将它 ...
- 【BZOJ2338】[HNOI2011]数矩形 几何
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...
- (非原)SQL注入专题--整理帖 && like 语句拼sql 如何防止注入攻击。
原地址:blog.csdn.net/lvjin110/article/details/28697695 like 语句拼sql 如何防止注入攻击?http://bbs.csdn.net/topics/ ...
- SQL Server 2005中top关键字的用法
1.返回N条记录数 select top n * from <表名> [查询条件] 2.返回总结果集中指定百分比记录数 select top n percent * from <表名 ...
- Windows服务器从Linux服务器上以FTP形式获取图片
Windows服务器上运行一个获取图片的程序,获取图片采用的是FTP方式: 准备条件: Linux服务器上创建一个FTP的用户:ftppic 这个账号要有权限才可以,然后编写Windows端代码: p ...
- [IR课程笔记]概率检索模型
几个符号意义: R:相关文档集 NR:不相关文档集 q:用户查询 dj:文档j 1/0风险情况 PRP(probability ranking principle):概率排序原理,利用概率模型来估计每 ...
- 重新认识vue之事件阻止冒泡
冒泡的表现 近期用vue做了一个需求,大概是同一个区域,点击不同位置有不同的响应函数,还有个总的响应函数,好吧,如下图所示: 他们的DOM结构如下: <div v-for="(item ...
- 手写Future模式
根据前面我所说的Futrue模式,手写一个: 分别对应的Java代码,大家拿来参考: package FutureTest; //公共data数据接口 public abstract class Da ...
- centos 配置
安装 node 源地址: http://my.oschina.net/blogshi/blog/260953 (一) 编译好的文件 简单说就是解压后,在bin文件夹中已经存在node以及npm,如果你 ...