题意

询问区间内逆序对数  强制在线

1<=n<=50000 1<=m<=50000

题解

两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个
边角余料用个树状数组就行了

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int n,Block,a[N],b[N],block[N],R[],L[],f[][],tr[][N],m,ans;
int lowbit(int x){
return x&-x;
}
void add(int id,int x,int w){
for(int i=x;i<=n;i+=lowbit(i)){
tr[id][i]+=w;
}
}
int getsum(int id,int x){
int tmp=;
for(int i=x;i;i-=lowbit(i)){
tmp+=tr[id][i];
}
return tmp;
}
int main(){
scanf("%d",&n);
Block=sqrt(n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
block[i]=(i-)/Block+;
if(!L[block[i]])L[block[i]]=i;
R[block[i]]=i;
}
sort(b,b++n);
int tot=unique(b+,b++n)-b-;
for(int i=;i<=n;i++){
a[i]=lower_bound(b+,b++tot,a[i])-b;
}
for(int i=;i<=block[n];i++){
for(int j=L[i];j<=n;j++){
add(i,a[j],);
}
}
for(int i=;i<=block[n];i++){
int tot=;
for(int j=L[i];j<=n;j++){
add(,a[j],);
tot+=getsum(,n)-getsum(,a[j]);
f[i][block[j]]=tot;
}
for(int j=L[i];j<=n;j++){
add(,a[j],-);
}
}
scanf("%d",&m);
while(m--){
int l,r;
scanf("%d%d",&l,&r);
l=l^ans;r=r^ans;
if(l>r)swap(l,r);
if(l==||r==||l>n||r>n)continue;
if(block[l]+>=block[r]){
ans=;
for(int i=l;i<=r;i++){
add(,a[i],);
ans+=getsum(,n)-getsum(,a[i]);
}
for(int i=l;i<=r;i++){
add(,a[i],-);
}
}
else{
ans=f[block[l]+][block[r]-];
int size=L[block[r]]-R[block[l]]-;
// cout<<ans<<" "<<size<<"sdjksd"<<endl;
for(int i=l;i<=R[block[l]];i++){
ans+=getsum(block[l]+,a[i]-)-getsum(block[r],a[i]-);
add(,a[i],);
ans+=getsum(,n)-getsum(,a[i]);
}
for(int i=L[block[r]];i<=r;i++){
ans+=size-(getsum(block[l]+,a[i])-getsum(block[r],a[i]));
add(,a[i],);
ans+=getsum(,n)-getsum(,a[i]);
}
for(int i=l;i<=R[block[l]];i++){
add(,a[i],-);
}
for(int i=L[block[r]];i<=r;i++){
add(,a[i],-);
}
}
printf("%d\n",ans);
}
return ;
}

BZOJ3744 Gty的妹子序列(分块+树状数组)的更多相关文章

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

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

  2. 【BZOJ3744】Gty的妹子序列 分块+树状数组

    [BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...

  3. BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)

    题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...

  4. BZOJ 3744 Gty的妹子序列 分块+树状数组

    具体分析见 搬来大佬博客 时间复杂度 O(nnlogn)O(n\sqrt nlogn)O(nn​logn) CODE #include <cmath> #include <cctyp ...

  5. BZOJ3787:Gty的文艺妹子序列(分块,树状数组)

    Description Autumn终于会求区间逆序对了!Bakser神犇决定再考验一下他,他说道: “在Gty的妹子序列里,某个妹子的美丽度可也是会变化的呢.你还能求出某个区间中妹子们美丽度的逆序对 ...

  6. BZOJ 3787: Gty的文艺妹子序列 [分块 树状数组!]

    传送门 题意:单点修改,询问区间内逆序对数,强制在线 看到加了!就说明花了不少时间.... 如果和上题一样预处理信息,用$f[i][j]$表示块i到j的逆序对数 强行修改的话,每个修改最多会修改$(\ ...

  7. BZOJ 3787 Gty的文艺妹子序列(分块+树状数组+前缀和)

    题意 给出n个数,要求支持单点修改和区间逆序对,强制在线. n,m<=50000 题解 和不带修改差不多,预处理出smaller[i][j]代表前i块小于j的数的数量,但不能用f[i][j]代表 ...

  8. BZOJ3787 gty的文艺妹子序列 【树状数组】【分块】

    题目分析: 首先这种乱七八糟的题目就分块.然后考虑逆序对的统计. 一是块内的,二是块之间的,三是一个块内一个块外,四是都在块外. 令分块大小为$S$. 块内的容易维护,单次维护时间是$O(S)$. 块 ...

  9. 【BZOJ 3295】动态逆序对 - 分块+树状数组

    题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ...

  10. 【bzoj2141】排队 分块+树状数组

    题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别, ...

随机推荐

  1. (转载) 据说年薪30万的Android程序员必须知道的

    据说年薪30万的Android程序员必须知道的帖子 标签: android 2015-03-12 16:52 28705人阅读 评论(14) 收藏 举报 Android中国开发精英 目前包括: And ...

  2. 51nod 1158 全是1的最大子矩阵(单调栈 ,o(n*m))

    前置问题:51nod 1102 面积最大的矩形 附上链接: 51nod 1102 面积最大的矩形 这题的题解博客 需要了解的知识:单调栈,在前置问题中已经讲解. 解题思路 对每行求左边连续1的个数,得 ...

  3. POJ 3617 Best Cow Line 贪心算法

    Best Cow Line Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26670   Accepted: 7226 De ...

  4. Pyinstaller 1 使用PyInstaller

    使用PyInstaller pyinstaller命令的语法是: pyinstaller[ options ] script [ script ...] | spec文件 在最简单的情况下,将当前目录 ...

  5. SQL SERVER 提取字符串中汉字

    IF OBJECT_ID('DBO.GET_ZNSTR') IS NOT NULLDROP FUNCTION DBO.GET_ZNSTRGOCREATE FUNCTION DBO.GET_ZNSTR( ...

  6. Dropout 上

    From <白话深度学习与TensorFlow> Dropout 顾名思义是“丢弃”,在一轮训练阶段丢弃一部分网络节点,比如可以在其中的某些层上临时关闭一些节点,让他们既不输入也不输出,这 ...

  7. vue实现tab栏切换

    html <ul class="tab"> <li v-for="(item,index) in tabs" @click="tab ...

  8. Shiro结合Spring boot开发权限管理系统

    前一篇文章说了,我从开始工作就想有一个属于自己的博客系统,当然了,我想的是多用户的博客,大家都可以发文章记笔记,我最初的想法就是这样. 博客系统搭建需要使用的技术: 1.基于Spring boot 2 ...

  9. Mysql学习总结(26)——MySQL子查询

    mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后 ...

  10. 时间就是金钱HNCOI2000(最短路)

    时间就是金钱HNCOI2000 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! 人们总是选时间最短或费用最低的路线 例如, ...