题目链接

静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\sqrt n$块,预处理出两个数组:$sum[i][j]$和$inv[i][j]$,$sum[i][j]$表示前i个块中小于等于j的数的个数,$inv[i][j]$表示第i块与第j块之间的逆序对数,递推搞一下就行。查询的时候中间的部分直接查询,两边多出来的部分暴力计算贡献即可。总复杂度$O(n\sqrt nlogn)$

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e4+,sqrtN=,inf=0x3f3f3f3f;
int a[N],b[N],c[N],n2,in[N],L[sqrtN],R[sqrtN],n,m,sqrtn,nb;
int sum[sqrtN][N],inv[sqrtN][sqrtN];
void add(int u,int x) {for(; u<=n2; u+=u&-u)c[u]+=x;}
int get(int u) {int ret=; for(; u; u-=u&-u)ret+=c[u]; return ret;}
int main() {
scanf("%d",&n),sqrtn=sqrt(n+0.5);
for(int i=; i<=n; ++i)scanf("%d",&a[i]);
for(int i=; i<=n; ++i)b[i-]=a[i];
sort(b,b+n),n2=unique(b,b+n)-b;
for(int i=; i<=n; ++i)a[i]=lower_bound(b,b+n2,a[i])-b+;
for(int i=; i<=n; ++i) {nb=in[i]=i/sqrtn+; if(!L[in[i]])L[in[i]]=i; R[in[i]]=i;}
for(int i=; i<=nb; ++i) {
for(int j=L[i]; j<=R[i]; ++j)sum[i][a[j]]++;
for(int j=; j<=n; ++j)sum[i][j]+=sum[i][j-];
for(int j=; j<=n; ++j)sum[i][j]+=sum[i-][j];
}
for(int i=; i<=nb; ++i) {
for(int j=R[i]; j>=L[i]; --j)inv[i][i]+=get(a[j]-),add(a[j],);
for(int j=R[i]; j>=L[i]; --j)add(a[j],-);
}
for(int i=; i<=nb; ++i)
for(int j=i+; j<=nb; ++j) {
for(int k=L[j]; k<=R[j]; ++k)inv[i][j]+=(R[j-]-L[i]+)-(sum[j-][a[k]]-sum[i-][a[k]]);
inv[i][j]+=inv[i][j-]+inv[j][j];
}
scanf("%d",&m);
for(int ans=; m--;) {
int l,r;
scanf("%d%d",&l,&r),l^=ans,r^=ans,ans=;
if(in[l]==in[r]) {
for(int i=r; i>=l; --i)ans+=get(a[i]-),add(a[i],);
for(int i=r; i>=l; --i)add(a[i],-);
} else {
int lb=in[l]+,rb=in[r]-;
if(lb<=rb) {
ans+=inv[lb][rb];
for(int i=r; i>=L[in[r]]; --i)ans+=(R[rb]-L[lb]+)-(sum[rb][a[i]]-sum[lb-][a[i]]);
for(int i=R[in[l]]; i>=l; --i)ans+=sum[rb][a[i]-]-sum[lb-][a[i]-];
}
for(int i=r; i>=L[in[r]]; --i)ans+=get(a[i]-),add(a[i],);
for(int i=R[in[l]]; i>=l; --i)ans+=get(a[i]-),add(a[i],);
for(int i=r; i>=L[in[r]]; --i)add(a[i],-);
for(int i=R[in[l]]; i>=l; --i)add(a[i],-);
}
printf("%d\n",ans);
}
return ;
}

BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)的更多相关文章

  1. bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块

    题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...

  2. bzoj 3744: Gty的妹子序列 主席树+分块

    3744: Gty的妹子序列 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 34[Submit][Status] Descr ...

  3. BZOJ 3744 Gty的妹子序列 (分块 + BIT)

    3744: Gty的妹子序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1931  Solved: 570[Submit][Status][Dis ...

  4. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec  Memory ...

  5. BZOJ 3744 Gty的妹子序列

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

  6. BZOJ 3744: Gty的妹子序列 [分块]

    传送门 题意:询问区间内逆序对数 感觉这种题都成套路题了 两个预处理$f[i][j]$块i到j的逆序对数,$s[i][j]$前i块$\le j$的有多少个 f我直接处理成到元素j,方便一点 用个树状数 ...

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

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

  8. BZOJ 3744 Gty的妹子序列 做法集结

    我只会O(nnlogn)O(n\sqrt nlogn)O(nn​logn)的 . . . . 这是分块+树状数组+主席树的做法O(nnlogn)O(n\sqrt nlogn)O(nn​logn) 搬来 ...

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

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

随机推荐

  1. 数据结构实习 Problem H 迷宫的最短路径

    数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径. 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 ...

  2. linux安装数据库删除

    https://blog.csdn.net/qq_40550973/article/details/80721014 卸载mysql .快速删除 yum remove mysql mysql-serv ...

  3. python中如何剔除字符串

    问题: 过滤用户输入中前后多余的空白字符 ‘    ++++abc123---    ‘ 过滤某windows下编辑文本中的’\r’: ‘hello world \r\n’ 去掉文本中unicode组 ...

  4. ls/vi等 command not found

    输入一下命令即可 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin source / ...

  5. Gruntjs提高生产力(三)

    以下例子来自真实项目,有所删减 grunt-test project 目录结构如下 一我的目的: 1.在src-dev目录中开发最终产出于src目录 2.src-dev中的index目录相当于一个wi ...

  6. day5-import机制详述

    一.概述 但凡稍微复杂一些的python程序,都不可避免地需要import一些内置模块或外部模块,当然也有可能import进来一个package,java语言中也经常见到各种import打头,可见其用 ...

  7. Netty实例几则

    Netty是基于JDK NIO的网络框架 简化了NIO编程, 不用程序自己维护selector, 将网络通信和数据处理的部分做了分离 多用于做底层的数据通信, 心跳检测(keepalived) 1. ...

  8. php中mysql_fetch_row() 和mysql_fetch_array之间有什么区别

    mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得eg:$sql="select ab ...

  9. Docker的大坑小洼(一)

    Docker的大坑小洼 Posted on March 2, 2015March 2, 2015 by 孙宏亮 Docker成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样 ...

  10. bzoj3623

    题解: 刚看到题目,还以为是2-sat 可是似乎不对啊... 然后就只能爆搜了 看了网上的题解,woc还真是报搜 然后就ac了 当然爆搜还要随机化 代码: #include<bits/stdc+ ...