我是萌萌的传送门

感觉这题还是不错的……虽然其实算是比较水的题= =

首先分块,令f[i][j]表示第i块到第j块的逆序对数,询问的时候直接计算不完整块与完整块以及不完整块之间的逆序对。

不完整块之间的逆序对直接树状数组暴力求,至于不完整块和完整块的逆序对,我是令s[i]表示前i块的权值前缀和,这样单次查询O(1),可以减小一点常数,代价是空间稍微费了点……

预处理O(nsqrt(n)logn),单次查询O(sqrt(n)logn),空间O(nsqrt(n)),好吧我懒得算如何调节块大小来降低复杂度了,于是就随便找了个233当的块大小= =

细节并不多,然而因为各种脑残错误调了半天才敢交,又因为没看见要离散化和没加强制在线RE两次,真是废了……

 /**************************************************************
Problem: 3744
User: hzoier
Language: C++
Result: Accepted
Time:9688 ms
Memory:49700 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,B=,maxb=;
void add(int,int);
int query(int);
int a[maxn],b[maxn],id[maxn],L[maxb]={},R[maxb]={},cntb,f[maxb][maxb]={{}},s[maxb][maxn]={{}},c[maxn]={};
int n,m,l,r,lb,rb,ans=;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
cntb=id[i]=(i-)/B+;
if(!L[id[i]])L[id[i]]=i;
R[id[i]]=i;
}
copy(a+,a+n+,b+);
sort(b+,b+n+);
for(int i=;i<=n;i++)s[id[i]][a[i]=lower_bound(b+,b+n+,a[i])-b]++;
for(int i=;i<=cntb;i++){
for(int j=;j<=n;j++)s[i][j]+=s[i-][j];
for(int j=i;j<=cntb;j++){
for(int k=L[j];k<=R[j];k++){
f[i][j]+=query(a[k]+);
add(a[k],);
}
f[i][j]+=f[i][j-];
}
memset(c,,sizeof(c));
}
for(int i=;i<=cntb;i++)for(int j=;j<=n;j++)s[i][j]+=s[i][j-];
scanf("%d",&m);
while(m--){
scanf("%d%d",&l,&r);
l^=ans;r^=ans;
if(id[l]>=id[r]-){
ans=;
for(int i=l;i<=r;i++){
ans+=query(a[i]+);
add(a[i],);
}
for(int i=l;i<=r;i++)add(a[i],-);
}
else{
lb=id[l]+;rb=id[r]-;
ans=f[lb][rb];
for(int i=l;i<L[lb];i++){
ans+=query(a[i]+)+s[rb][a[i]-]-s[lb-][a[i]-];
add(a[i],);
}
for(int i=R[rb]+;i<=r;i++){
ans+=query(a[i]+)+(s[rb][n]-s[rb][a[i]])-(s[lb-][n]-s[lb-][a[i]]);
add(a[i],);
}
for(int i=l;i<L[lb];i++)add(a[i],-);
for(int i=R[rb]+;i<=r;i++)add(a[i],-);
}
printf("%d\n",ans);
}
return ;
}
void add(int x,int d){
while(x){
c[x]+=d;
x&=x-;
}
}
int query(int x){
int ans=;
while(x<=n){
ans+=c[x];
x+=x&-x;
}
return ans;
}

bzoj3744 Gty的妹子序列的更多相关文章

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

    离散化,分块. 预处理出:ans[i][j] 第i块到第j块的逆序对数. f[i][j] 第1~i块中大于j的数的个数. g[i][j] 第1~j块中小于j的数的个数. 每次询问时对于整块部分可以O( ...

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

    题意 询问区间内逆序对数  强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. BZOJ 3744 Gty的妹子序列

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

随机推荐

  1. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  2. [转]extjs组件添加事件监听的三种方式

    原文地址:http://blog.csdn.net/y6300023290/article/details/18989635 1.在定义组件配置的时候设置 xtype : 'textarea', na ...

  3. ABP文档 :Overall - Module System

    模块介绍 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是一个模块.如果应用中有多个程序集,建议为每个程序集创建一个模块定义.模块 ...

  4. neo4j初次使用学习简单操作-cypher语言使用

    Neo4j 使用cypher语言进行操作 Cypher语言是在学习Neo4j时用到数据库操作语言(DML),涵盖对图数据的增删改查  neo4j数据库简单除暴理解的概念: Neo4j中不存在表的概念, ...

  5. 在windows上部署使用Redis

    参考地址: http://keenwon.com/1275.html

  6. Socket编程(4)TCP粘包问题及解决方案

    ① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...

  7. VR、AR、MR的区别

    VR.AR.MR定义: 什么是虚拟现实? 虚拟现实(Virtual Reality,简称VR,又译作灵境.幻真)是近年来出现的高新技术,也称灵境技术或人工环境.虚拟现实是利用电脑模拟产生一个三维空间的 ...

  8. FFT 快速傅里叶变换浅析

    终于补完坑了哈哈哈 这个东西很神奇,看了半天网上的解释和课件,研究了很长时间,算是大概明白了它的原理. 话不多说先上图. 我们要求的h(x)=f(x)*g(x),f(x)=Σai*x^i,g(x)=Σ ...

  9. Smallest Common Multiple

    FCC题目:找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 -- 找出能被 1 和 3 和它们之间所有数字整除 ...

  10. Ubuntu学习总结-09 安装 Pycharm

    一 下载 PyCharm 从以下网址下载Linux版本的Pycharm,这里使用的版本是pycharm-professional-2016.2.3.tar.gz . http://www.jetbra ...