题目链接

静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\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. RabbitMQ入门(1)——Hello World

    这系列是官网的翻译和一些博客的参考,仅供自己复习使用. 介绍 官网定义: RabbitMQ is the most widely deployed open source message broker ...

  2. 纯js提交get和post请求

    get function get(URL, PARAMS) { var temp = document.createElement("form"); temp.method = & ...

  3. emmet常用指令组合

    emmet的应用   1.生成html(需要先将文件命名为.html后缀) !+tab,html:5+tab   2.生成meta utf meta:utf+tab   3.生成meta viewpo ...

  4. Sql类型

    1.varchar和nvarchar的区别:varchar(n)长度为n个字节的可变长度且非Unicode的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节的实际 ...

  5. apollo各协议支持的客户端

    apollo 源自 activemq,以快速.可靠著称,支持多协议:STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets,下面就STOMP, AMQP, M ...

  6. dropout 为何会有正则化作用

    在神经网络中经常会用到dropout,大多对于其解释就是dropout可以起到正则化的作用. 一下是我总结的对于dropout的理解.花书上的解释主要还是从模型融合的角度来解释,末尾那一段从生物学角度 ...

  7. FontAwesome::Sass(5.x版)使用帮助。

    FontAwesome::Sass(5.x版) https://fontawesome.com/icons?d=gallery&m=free 只能使用免费的. 在app/assets/styl ...

  8. guava的事件发布订阅功能

    事件的重要性,不用说很重要,在很多时候我们做完一个操作的时候,需要告知另外一个对象让他执行相应操作,比如当用户注册成功的时候,需要抛出一个注册成功的事件,那么有监听器捕获到这个事件,完成后续用户信息初 ...

  9. wii 入门之路--fatt

    wii 入门之路--fatt system menu:系统界面,开机进入后,显示很多应用,4.1用IOS60. Channel:理解为界面中的软件应用和游戏. IOS:IOS(Input Output ...

  10. Jenkins学习之旅

    学习博客:http://www.cnblogs.com/zz0412/tag/jenkins/   https://jenkins.io/doc/   http://www.cnblogs.com/h ...