BZOJ_3744_Gty的妹子序列
BZOJ3744: Gty的妹子序列
https://lydsy.com/JudgeOnline/problem.php?id=3744
分析:
- 预处理出来每一块块首到所有位置的逆序对数。
- 查询时主席树上查即可。
- 卡常
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 60050
typedef int ll;
int n,a[N],m;
int blo,size,L[N],R[N],pos[N];
int siz[N*23],ls[N*23],rs[N*23],cnt,V[N],ln,root[N];
ll ansblo[305][N];
void update(int l,int r,int x,int &p,int q) {
p=++cnt; siz[p]=siz[q]+1; ls[p]=ls[q]; rs[p]=rs[q];
if(l==r) return ;
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,ls[p],ls[q]);
else update(mid+1,r,x,rs[p],rs[q]);
}
int qmnx(int l,int r,int x,int p,int q) {
if(l==r) return l<=x?siz[q]-siz[p]:0;
int mid=(l+r)>>1;
if(x<=mid) return qmnx(l,mid,x,ls[p],ls[q]);
else return qmnx(mid+1,r,x,rs[p],rs[q])+siz[ls[q]]-siz[ls[p]];
}
int qmxx(int l,int r,int x,int p,int q) {
if(l==r) return l>=x?siz[q]-siz[p]:0;
int mid=(l+r)>>1;
if(x<=mid) return qmxx(l,mid,x,ls[p],ls[q])+siz[rs[q]]-siz[rs[p]];
else return qmxx(mid+1,r,x,rs[p],rs[q]);
}
ll work(int x,int y) {
int p=pos[x],q=pos[y],i;
ll re=0;
if(p==q) {
for(i=x+1;i<=y;i++) {
re+=qmxx(1,ln,a[i]+1,root[x-1],root[i-1]);
}
return re;
}
re=ansblo[p+1][y];
for(i=R[p];i>=x;i--) {
re+=qmnx(1,ln,a[i]-1,root[i],root[y]);
}
return re;
}
int s[N];
void fix(int x){for(;x<=ln;x+=x&-x)s[x]++;}
int find(int x){int ret=0;for(;x;x-=x&-x)ret+=s[x];return ret;}
int main() {
///////////////////////////////////////////////////////////////////////////////////////////////
///*////////////////*/freopen("noon.in","r",stdin); freopen("noon.out","w",stdout);//////////////
///////////////////////////////////////////////////////////////////////////////////////////////
scanf("%d",&n);
int i,j,x,y,k;
size=sqrt(n);
blo=(n+size-1)/size;
for(i=1;i<=n;i++) scanf("%d",&a[i]),V[i]=a[i];
sort(V+1,V+n+1);
ln=unique(V+1,V+n+1)-V-1;
for(i=1;i<=n;i++) a[i]=lower_bound(V+1,V+ln+1,a[i])-V;
for(i=1;i<=n;i++) {
update(1,ln,a[i],root[i],root[i-1]);
}
for(i=1;i<=blo;i++) {
L[i]=R[i-1]+1; R[i]=min(i*size,n);
for(j=L[i];j<=R[i];j++) {
pos[j]=i;
}
}
for(i=1;i<=blo;i++) {
memset(s,0,sizeof(s));
for(j=L[i];j<=n;j++) {
ansblo[i][j]=ansblo[i][j-1]+j-L[i]-find(a[j]);
fix(a[j]);
}
}
scanf("%d",&m);
ll ans=0;
while(m--) {
scanf("%d%d",&x,&y);
x^=ans; y^=ans;
ans=work(x,y);
printf("%d\n",ans);
}
}
BZOJ_3744_Gty的妹子序列的更多相关文章
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1072 Solved: 292[Submit][Status][Di ...
- BZOJ3809: Gty的二逼妹子序列
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方 ...
- bzoj 3744: Gty的妹子序列 主席树+分块
3744: Gty的妹子序列 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 101 Solved: 34[Submit][Status] Descr ...
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
- 【bzoj3809】Gty的二逼妹子序列
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...
- BZOJ 3744 Gty的妹子序列 (分块 + BIT)
3744: Gty的妹子序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1931 Solved: 570[Submit][Status][Dis ...
随机推荐
- CentOS6.5下Oracle11G-R2安装、卸载
CentOS6.5下Oracle11G-R2安装.卸载 资源下载地址(包含本人全部安装过程中,系统备份文件):http://download.csdn.net/detail/attagain/7700 ...
- SOCKIT 在make时出现(target pattern contains no % stop)???
Make错误(***target pattern contains no % stop) 1. 问题描述 在按照SoC_SW_Lab_13.0.pdf操作时候出现了下列图片的错误 2. Bsp ...
- EntityFramework 6.0 修改一个已经存在的对象
public void UpdateObj(someobject obj) { db.Entry(obj).State = EntityState.Modified; db.SaveChanges() ...
- 记一次Oracle数据故障排除过程
前天在Oracle生产环境中,自己的存储过程运行时间超过1小时,怀疑是其他job运行时间过长推迟了自己job运行时间,遂重新跑job,发现同测试环境的确不同,运行了25分钟. 之后准备在测试环境中制造 ...
- mongo的时间类型,erlang中对其的处理
需求:要想在一个调度中,从mongo中查出大于一个时间戳的所有的数据总和. 这个需求很简单,一个是scheduler,还有另一个就是查出来大于某个时间戳的总和,比如大于每天0点时间点的和. 需要注意的 ...
- SecureCRT的上传和下载
securtCRT对于后台开发者并不陌生,在windows下是得力的助手.而文件从服务器上上传和下载是很基本.很日常的操作.下面就谈谈关于它的命令及操作: 借助securtCRT,使用linux命令s ...
- 开源大数据引擎:Greenplum 数据库架构分析
Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...
- PHP数据类型转换和运算符表达式
一:数据类型的转换 获取类型: gettype($a); 判断是否是某种类型的数据: is_类型名($a); 1.(int)$a; 2.settype($a,int); 二:运算符表达式 1.数学运算 ...
- 【BZOJ4383】[POI2015]Pustynia 线段树优化建图
[BZOJ4383][POI2015]Pustynia Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r ...
- 【BZOJ1835】[ZJOI2010]base 基站选址 线段树+DP
[BZOJ1835][ZJOI2010]base 基站选址 Description 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯 ...