bzoj3744 Gty的妹子序列
感觉这题还是不错的……虽然其实算是比较水的题= =
首先分块,令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的妹子序列的更多相关文章
- 【分块】【树状数组】bzoj3744 Gty的妹子序列
离散化,分块. 预处理出:ans[i][j] 第i块到第j块的逆序对数. f[i][j] 第1~i块中大于j的数的个数. g[i][j] 第1~j块中小于j的数的个数. 每次询问时对于整块部分可以O( ...
- BZOJ3744 Gty的妹子序列(分块+树状数组)
题意 询问区间内逆序对数 强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...
- bzoj3744: Gty的妹子序列 (BIT && 分块)
强制在线的区间询问逆序对数 如果不是强制在线 就是可以用莫队乱搞啦 强制在线的话 用f[i][j]记录第i块到第j个点之间的逆序对数 用s[i][j]记录前i块中小于等于j的数字个数 离散化一下 BI ...
- 【BZOJ3744】Gty的妹子序列 分块+树状数组
[BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...
- 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 ...
- 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
随机推荐
- IT培训行业揭秘(三)
关于培训班的课程是怎么设置的呢? 首先,国内也有几个水平不错的培训机构有自己课程研发体系,有自己的课程研发部门.我一直认为良心培训和黑心培训的区别就在这里,因为学生们所学的知识符不符合市场用功需求,就 ...
- map 函数----filter函数
# map 函数 l = (1,2,4,5,6,7,8,9,) print(list(map(lambda x:x**2,l)))#使用list类型((map函数(lambda 匿名函数定义x值:x* ...
- Android----消息弹出框
关于Android的知识,自从工作了就没有什么时间去总结学习过的知识,我个人比较喜欢学习后总结,今天就写一下关于android中消息弹出框的几种方式的简单示例,按照自己的思路写了一段,希望对和我一样在 ...
- AngularJS Scope(作用域)
1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ...
- Djago模板拾起
在view中使用template: 首先在settings.py中配置模板文件的路径. TEMPLATE_DIRS = ( '/home/django/mysite/templates', ) 1.变 ...
- python基础补漏-03-函数
函数:一般来说就是 以功能划分的代码模块 [1] 内置函数 一般我们使用的模块 ---可以大概有个了解 大多数的用法都很简单 2 [函数返回值] 我们应该控制函数的每条分支. 也就是说 我们得到的函数 ...
- NSObject+YYModel.h
01 - nil Nil NULL NSNull kCFNull 的区别 参考:http://www.jianshu.com/p/3aaefb3bcf73 02 - __bridge,__bridg ...
- cocos2d-x3.x自定义事件
-- 自定义事件 -- 监听: local eventDispatcher = self:getEventDispatcher();--self为继承Node的对象 local function ha ...
- Oracle XE手动建立数据库实例
参考资料为: [Oracle XE系列之三]使用OMF方式手工创建Oracle XE数据库 - 王立夫 - 博客园http://www.cnblogs.com/opfo/p/5056122.html ...
- 简单的maven配置
groupId是指com.xx 组织标识 artifactId才是项目名称 2)编译源代码 mvn compile 3)编译测试代码 mvn test-compile 4)清空 mvn clean 5 ...