#BZOJ3744 GTY的妹子序列
Description
我早已习惯你不在身边,
人间四月天 寂寞断了弦。
回望身后蓝天,
跟再见说再见……
某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现她们排成了一个序列,每个妹子有一个美丽度。
Bakser神犇与他打算研究一下这个妹子序列,于是Bakser神犇问道:"你知道区间[l,r]中妹子们美丽度的逆序对数吗?"
蒟蒻Autumn只会离线乱搞啊……但是Bakser神犇说道:"强制在线。"
请你帮助一下Autumn吧。
给定一个正整数序列a,对于每次询问,输出al...ar中的逆序对数,强制在线。
Input
第一行包括一个整数n(1<=n<=50000),表示数列a中的元素数。
第二行包括n个整数a1...an(ai>0,保证ai在int内)。
接下来一行包括一个整数m(1<=m<=50000),表示询问的个数。
接下来m行,每行包括2个整数l、r(1<=l<=r<=n),表示询问al...ar中的逆序
对数(若ai>aj且i<j,则为一个逆序对)。
l,r要分别异或上一次询问的答案(lastans),最开始时lastans=0。
保证涉及的所有数在int内。
Output
对每个询问,单独输出一行,表示al...ar中的逆序对数。
Sample Input
4
1 4 2 3
1
2 4
Sample Output
2
求区间逆序对……
连修改都没有,水题!
我们记f[i][j]为i~j块的总逆序对数,处理散块的时候除了+另一端的贡献,记得把整块的贡献加上~
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+10,Maxsiz = 233;
#define Inc(i,L,r) for(register int i=(L);i<=(r);++i)
#define Red(i,r,L) for(register int i=(r);i>=(L);--i)
int n,Q,a[N];
int siz,bl[N];
int sum_bigger[Maxsiz][N];//1~i个块大于等于我的个数
int sum_smaller[Maxsiz][N];//i~n个块小与等于的个数
int f[Maxsiz][Maxsiz];//块与块的逆序对总个数
struct SufFix{//后缀和 int c[N];#define lb(x) (x)&-(x)inline void add(int x,int k){for(;x>0;x-=lb(x))c[x]+=k;}inline int sum(int x){int ret=0;for(;x<=n;x+=lb(x))ret+=c[x];return ret;}
}sf;
inline void disc(){scanf("%d",&n);Inc(i,1,n)scanf("%d",&a[i]);int tmp[N];Inc(i,1,n)tmp[i]=a[i];sort(tmp+1,tmp+1+n);int len=unique(tmp+1,tmp+1+n)-tmp-1;Inc(i,1,n)a[i]=lower_bound(tmp+1,tmp+1+len,a[i])-tmp;
}
inline void init(){siz=sqrt(n);Inc(i,1,n)bl[i]=(i-1)/siz+1;//n√n Inc(i,1,n)++sum_bigger[bl[i]][a[i]];Inc(i,1,bl[n]){Red(j,n,1)sum_bigger[i][j]+=sum_bigger[i][j+1];Red(j,n,1)sum_bigger[i][j]+=sum_bigger[i-1][j];}Inc(i,1,n)++sum_smaller[bl[i]][a[i]];Red(i,bl[n],1){Inc(j,1,n)sum_smaller[i][j]+=sum_smaller[i][j-1];Inc(j,1,n)sum_smaller[i][j]+=sum_smaller[i+1][j];}//n√nlognInc(i,1,bl[n]){memset(sf.c,0,sizeof(sf.c));int ret=0;Inc(j,i,bl[n]){Inc(k,1,siz){int idx=(j-1)*siz+k;if(idx>n)break;//防止越界ret+=sf.sum(a[idx]+1);sf.add(a[idx],1);}f[i][j]=ret;}}
}
int las_ans;
inline int Query(int L,int r){int ret=0;if(bl[r]-bl[L]<=1){Inc(i,L,r)ret+=sf.sum(a[i]+1),sf.add(a[i],1);Inc(i,L,r)sf.add(a[i],-1);}else {//左散块 √nlognInc(i,L,bl[L]*siz)ret+=sf.sum(a[i]+1),sf.add(a[i],1);//本身 Inc(i,L,bl[L]*siz)ret+=sum_smaller[bl[L]+1][a[i]-1]-sum_smaller[bl[r]][a[i]-1];//对整块区间的影响 //整块区间 1ret+=f[bl[L]+1][bl[r]-1];//右区间 √nlognInc(i,(bl[r]-1)*siz+1,r)ret+=sf.sum(a[i]+1),sf.add(a[i],1);//本身+左散块 Inc(i,(bl[r]-1)*siz+1,r)ret+=sum_bigger[bl[r]-1][a[i]+1]-sum_bigger[bl[L]][a[i]+1];//对整块的影响 //撤销 √nlognInc(i,L,bl[L]*siz)sf.add(a[i],-1);Inc(i,(bl[r]-1)*siz+1,r)sf.add(a[i],-1);}return las_ans=ret;
}
inline void solv(){memset(sf.c,0,sizeof(sf.c));scanf("%d",&Q);while(Q--){int L,r;scanf("%d%d",&L,&r);L^=las_ans,r^=las_ans;if(L>r)swap(L,r);cout<<Query(L,r)<<"\n";}
}
int main(){disc();init();solv();return 0;
}
#BZOJ3744 GTY的妹子序列相关推荐
- bzoj3744 Gty的妹子序列
3744: Gty的妹子序列 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 967 Solved: 293 [ Submit][ Status ...
- bzoj3744: Gty的妹子序列 (BIT 分块)
强制在线的区间询问逆序对数 如果不是强制在线 就是可以用莫队乱搞啦 强制在线的话 用f[i][j]记录第i块到第j个点之间的逆序对数 用s[i][j]记录前i块中小于等于j的数字个数 离散化一下 BI ...
- 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...
- BZOJ3809: Gty的二逼妹子序列
BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...
- [BZOJ3809]Gty的二逼妹子序列
[BZOJ3809]Gty的二逼妹子序列 试题描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽 ...
- 【bzoj3089】gty的二逼妹子序列
一眼又是个莫队-- 首先看这时间/空间复杂度,线段树/主席树就别想了-- 然后么--zcy就有点傻了-- 于是zcy看了下hzwer,感觉受教育了. 分块的调块大小真是玄学设计. 有没有一种方法在修改 ...
- P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】
正题 题目链接:https://www.luogu.com.cn/problem/P4867 题目大意 一个序列要求支持询问一个区间[l,r][l,r][l,r]内在[a,b][a,b][a,b]之间 ...
- 洛谷T46780 ZJL 的妹子序列(生成函数)
题面 传送门 题解 这居然是一道语文题? 首先不难看出,因为每一次相邻元素交换最多减少一个逆序对,所以至少\(m\)次交换就代表这个序列的逆序对个数为\(m\) 我们考虑一下,假设现在已经放完了\(i ...
- BZOJ 3720: Gty的妹子树 [树上size分块]
传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...
最新文章
- BFD与IGP快速收敛应用测试
- 拆解交易系统--如何做好稳定性
- 我对软件设计原则的理解
- EventBridge消息路由|高效构建消息路由能力
- 属于PHP语言结构的是,PHP语言结构
- 吴恩达机器学习--单变量线性回归【学习笔记】
- numa节点_极致性能(1):以NUMA为起点
- RESTful API 编写规范
- 【Nginx那些事】nginx配置实例(一)反向代理
- 经过这几年的磨练_通过构建这15个项目来磨练您JavaScript技能
- 3年了,我依旧单身,而微信小程序已经普及了
- 【图文+代码】不客气的说,这可能是你距离深入理解Java接口最近的一次
- 【技术教程】如何使用OBS推流到EasyDSS平台实现同屏播放?
- 前端开发前的准备工作
- 五步恢复XP系统“桌面清理向导”
- Part 1: 如何把Power BI 嵌入到sharepoint 网站
- 网络技巧|远程桌面连接不上的多种解决方案!
- apk在android12设备无法安装(兼容android 12或更高版本)
- 解析B2C电子商务网站系统架构
- 什么是S参数? S参数的含义?