BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)
静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\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的妹子序列 (区间逆序对数,分块)的更多相关文章
- bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...
- bzoj 3744: Gty的妹子序列 主席树+分块
3744: Gty的妹子序列 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 101 Solved: 34[Submit][Status] Descr ...
- BZOJ 3744 Gty的妹子序列 (分块 + BIT)
3744: Gty的妹子序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1931 Solved: 570[Submit][Status][Dis ...
- BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec Memory ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
- BZOJ 3744: Gty的妹子序列 [分块]
传送门 题意:询问区间内逆序对数 感觉这种题都成套路题了 两个预处理$f[i][j]$块i到j的逆序对数,$s[i][j]$前i块$\le j$的有多少个 f我直接处理成到元素j,方便一点 用个树状数 ...
- BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)
题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...
- BZOJ 3744 Gty的妹子序列 做法集结
我只会O(nnlogn)O(n\sqrt nlogn)O(nnlogn)的 . . . . 这是分块+树状数组+主席树的做法O(nnlogn)O(n\sqrt nlogn)O(nnlogn) 搬来 ...
- BZOJ 3744 Gty的妹子序列 分块+树状数组
具体分析见 搬来大佬博客 时间复杂度 O(nnlogn)O(n\sqrt nlogn)O(nnlogn) CODE #include <cmath> #include <cctyp ...
随机推荐
- apache配置ssl
1.确认是否安装ssl模块 是否有mod_ssl.so文件 2.生成证书和密钥 linux下 步骤1:生成密钥 命令:openssl genrsa 1024 > server.key 说 ...
- Spring 集成rabbiatmq
pom 文件 <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artif ...
- 基于usb4java实现的java下的usb通信
项目地址:点击打开 使用java开发的好处就是跨平台,基本上java的开发的程序在linux.mac.MS上都可以运行,对应这java的那句经典名言:一次编写,到处运行.这个项目里面有两种包选择,一个 ...
- 【Python】 \uxxxx转中文
背景 写Python接口自动化过程中,使用到邮件发送测试结果详情,邮件呈现出来的内容为 \uxxxx ,不是中文 接收到的邮件内容: 成功: 110 失败: 1 失败的用例如下 : [(u'\u752 ...
- js三种对话框
<html> <head> <script> function tip1(){ //这个基本没有什么说的,就是弹出一个提醒的对话框 alert("这个第一 ...
- Python在线教程(廖雪峰)
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
- 第五章 如何使用Burp Target
Burp Target 组件主要包含站点地图.目标域.Target 工具三部分组成,他们帮助渗透测试人员更好地了解目标应用的整体状况.当前的工作涉及哪些目标域.分析可能存在的攻击面等信息,下面我们就分 ...
- Lua学习笔记1,基本数据类型
1.字符串的连接使用的是 .. ,如 print(123 .. 44) 输出 12344 print ('a' .. 'b') 输出 ab print(123 .. 44)这句的时候 .. 两边要空 ...
- day39 算法基础
参考博客: http://www.cnblogs.com/alex3714/articles/5474411.html http://www.cnblogs.com/wupeiqi/articles/ ...
- 利用ModSecurity防御暴力破解
利用ModSecurity防御暴力破解 from:http://www.freebuf.com/articles/web/8749.html 2013-04-18 共553248人围观 ,发现 12 ...