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的妹子序列相关推荐

  1. bzoj3744 Gty的妹子序列

    3744: Gty的妹子序列 Time Limit: 20 Sec   Memory Limit: 128 MB Submit: 967   Solved: 293 [ Submit][ Status ...

  2. bzoj3744: Gty的妹子序列 (BIT 分块)

    强制在线的区间询问逆序对数 如果不是强制在线 就是可以用莫队乱搞啦 强制在线的话 用f[i][j]记录第i块到第j个点之间的逆序对数 用s[i][j]记录前i块中小于等于j的数字个数 离散化一下 BI ...

  3. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  4. BZOJ3809: Gty的二逼妹子序列

    BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...

  5. [BZOJ3809]Gty的二逼妹子序列

    [BZOJ3809]Gty的二逼妹子序列 试题描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽 ...

  6. 【bzoj3089】gty的二逼妹子序列

    一眼又是个莫队-- 首先看这时间/空间复杂度,线段树/主席树就别想了-- 然后么--zcy就有点傻了-- 于是zcy看了下hzwer,感觉受教育了. 分块的调块大小真是玄学设计. 有没有一种方法在修改 ...

  7. P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P4867 题目大意 一个序列要求支持询问一个区间[l,r][l,r][l,r]内在[a,b][a,b][a,b]之间 ...

  8. 洛谷T46780 ZJL 的妹子序列(生成函数)

    题面 传送门 题解 这居然是一道语文题? 首先不难看出,因为每一次相邻元素交换最多减少一个逆序对,所以至少\(m\)次交换就代表这个序列的逆序对个数为\(m\) 我们考虑一下,假设现在已经放完了\(i ...

  9. BZOJ 3720: Gty的妹子树 [树上size分块]

    传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...

最新文章

  1. BFD与IGP快速收敛应用测试
  2. 拆解交易系统--如何做好稳定性
  3. 我对软件设计原则的理解
  4. EventBridge消息路由|高效构建消息路由能力
  5. 属于PHP语言结构的是,PHP语言结构
  6. 吴恩达机器学习--单变量线性回归【学习笔记】
  7. numa节点_极致性能(1):以NUMA为起点
  8. RESTful API 编写规范
  9. 【Nginx那些事】nginx配置实例(一)反向代理
  10. 经过这几年的磨练_通过构建这15个项目来磨练您JavaScript技能
  11. 3年了,我依旧单身,而微信小程序已经普及了
  12. 【图文+代码】不客气的说,这可能是你距离深入理解Java接口最近的一次
  13. 【技术教程】如何使用OBS推流到EasyDSS平台实现同屏播放?
  14. 前端开发前的准备工作
  15. 五步恢复XP系统“桌面清理向导”
  16. Part 1: 如何把Power BI 嵌入到sharepoint 网站
  17. 网络技巧|远程桌面连接不上的多种解决方案!
  18. apk在android12设备无法安装(兼容android 12或更高版本)
  19. 解析B2C电子商务网站系统架构
  20. 什么是S参数? S参数的含义?

热门文章

  1. Python实现识别html文本内容并截图放入word文档
  2. 互联网江湖,桌面客户端框架技术比武大会
  3. 解决brew update 连接git失败问题
  4. 红米note9 android10,红米note10和note9哪个更好 红米note10和note9性价比详解
  5. 基于杰理RTOS平台的433射频无线数传通信
  6. 由开始日期和有效天数算截止日期
  7. RestTemplat
  8. 内功修炼——动态规划DP
  9. 2022年全球市场电加热元件总体规模、主要生产商、主要地区、产品和应用细分研究报告
  10. ui设计师都有哪些面试技巧,设计师必备面试技巧