bzoj 3744: Gty的妹子序列 主席树+分块
3744: Gty的妹子序列
Time Limit: 15 Sec Memory Limit: 128 MB
Submit: 101 Solved: 34
[Submit][Status]
Description
Input
Output
对每个询问,单独输出一行,表示al...ar中的逆序对数。
Sample Input
1 4 2 3
1
2 4
Sample Output
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define MAXN 50010
#define MAXT 3200000
#define MAXB1 240
#define INF 0x3f3f3f3f
int n,m;
struct sgt_node
{
int lch,rch;
int t;
}sgt[MAXT];
int topt=;
void Add_sgt(int &now,int base,int l,int r,int pos)
{
now=++topt;
sgt[now]=sgt[base];
sgt[now].t++;
if (l==r)return ;
if (pos<=((l+r)>>))
Add_sgt(sgt[now].lch,sgt[base].lch,l,(l+r)>>,pos);
else
Add_sgt(sgt[now].rch,sgt[base].rch,((l+r)>>)+,r,pos);
}
int Qry_sgt(int now1,int now2,int l,int r,int x,int y)
{
if (!now1 && !now2)return ;
if (l==x && r==y)
return sgt[now1].t-sgt[now2].t;
int mid=(l+r)>>;
if (y<=mid)
return Qry_sgt(sgt[now1].lch,sgt[now2].lch,l,mid,x,y);
else if (mid<x)
return Qry_sgt(sgt[now1].rch,sgt[now2].rch,mid+,r,x,y);
else
return Qry_sgt(sgt[now1].lch,sgt[now2].lch,l,mid,x,mid)
+ Qry_sgt(sgt[now1].rch,sgt[now2].rch,mid+,r,mid+,y);
}
int roof[MAXN];
int Qry_tot(int rl,int rr,int x,int y)
{
return Qry_sgt(roof[rr],roof[rl-],,m,x,y);
} int num[MAXN];
int bs[MAXB1],bt[MAXB1];
int bres1[MAXB1][MAXN];
struct aaa
{
int pos,val;
}a[MAXN];
bool cmp_pos(aaa a1,aaa a2)
{
return a1.pos<a2.pos;
}
bool cmp_val(aaa a1,aaa a2)
{
return a1.val<a2.val;
}
int tarr[MAXN];
void Add_val(int pos)
{
while (pos<MAXN)
{
tarr[pos]++;
pos+=pos&(-pos);
}
}
int Qry_sum(int pos)
{
int ret=;
while (pos)
{
ret+=tarr[pos];
pos-=pos&(-pos);
}
return ret;
}
int main()
{
freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
scanf("%d",&n);
int i,j,k;
int x,y,z;
for (i=;i<=n;i++)
{
scanf("%d",&a[i].val);
a[i].pos=i;
}
sort(a+,a+n+,cmp_val);
m=;
for (i=;i<=n;i++)
{
if (i== || a[i].val!=x)
{
x=a[i].val;
a[i].val=++m;
}else
{
a[i].val=m;
}
}
sort(a+,a+n+,cmp_pos);
for (i=;i<=n;i++)
num[i]=a[i].val;
int sb=(int)sqrt(n);
if (sb>n)sb=n;
for (i=;i<=n;i++)
{
Add_sgt(roof[i],roof[i-],,m,num[i]);
}
memset(bs,INF,sizeof(bs));
memset(bt,,sizeof(bt));
for (i=;i<=n;i++)
{
bs[i/sb]=min(bs[i/sb],i);
bt[i/sb]=max(bt[i/sb],i);
}
int tp=n/sb;
int res=;
for (i=;i<=tp;i++)
{
memset(tarr,,sizeof(tarr));
for (j=bs[i];j<=n;j++)
{
bres1[i][j]=bres1[i][j-]+j-bs[i]-Qry_sum(num[j]);
Add_val(num[j]);
}
}
int q;
scanf("%d",&q);
res=;
int t;
for (i=;i<q;i++)
{
scanf("%d%d",&x,&y);
x^=res;y^=res;
if (abs(x/sb - y/sb)<=)
{
res=;
for (j=x+;j<=y;j++)
{
res+=Qry_tot(x,j-,num[j]+,m);
}
printf("%d\n",res);
}else
{
res=bres1[x/sb+][y];
for (j=x;j<=bt[x/sb];j++)
{
res+=Qry_tot(j+,y,,num[j]-);
}
printf("%d\n",res);
}
}
}
bzoj 3744: Gty的妹子序列 主席树+分块的更多相关文章
- BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec Memory ...
- BZOJ 3744 Gty的妹子序列 (分块 + BIT)
3744: Gty的妹子序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1931 Solved: 570[Submit][Status][Dis ...
- BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)
题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
- 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 ...
- bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...
- BZOJ 3744: Gty的妹子序列 [分块]
传送门 题意:询问区间内逆序对数 感觉这种题都成套路题了 两个预处理$f[i][j]$块i到j的逆序对数,$s[i][j]$前i块$\le j$的有多少个 f我直接处理成到元素j,方便一点 用个树状数 ...
- BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)
题目链接 静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\sqrt n$块,预处理出两个数组:$sum[i][j]$和$inv[i][j]$,$sum[i][j]$表示前i个块中小于 ...
随机推荐
- RAID 2.0
传统的RAID 1.0: 选几个硬盘—>做成RAID 5—>根据容量创建LUN—>映射给主机 1.重建时间随单盘容量的增大而迅速增加 2.性能上,一个LUN的读写只能在一个磁盘组 ...
- VC++判断是否连网
在开发中,需要判断是否有网络连接,于是写了个函数,实现代码如下: //判断是否有网络连接 static BOOL DoHaveInternetConnection() { BOOL bRet = FA ...
- iOS UIKit:Navigation Controllers
navigation controller是一种层次结构的container view controller,即其通过一个view controllers栈来管理内部的content view con ...
- Java基础--继承方法调用顺序
最近因为面试的原因,回过头来复习基础的知识,都忘光了,准备买本面试书回来啃. 我先把自己测试的结论总结写出来,以后忘记再来看看 如果b类继承自a类,在main方法中new出b的对象(不带参数),那么他 ...
- TransactionScope简单用法
记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...
- 利用jquery实现百度新闻导航菜单滑动动画
前言 前两天,群里有人问百度新闻导航是如何实现的,当时由于忙于工作,没有来得及细看,恰好今天有空闲时间,索性就实现一下这个效果吧: 思路与步骤 1.利用UL创建简单横向导航: <!DOCTYPE ...
- MVC中HttpContext, HttpContextBase, HttpContextWrapper联系
HttpContext // // 摘要: // 封装有关个别 HTTP 请求的所有 HTTP 特定的信息. public sealed class HttpContext : IServicePro ...
- Javascript实现图片库效果
思路: 无序列表加载图片文件.用img标签加载一张图片作为占位符.当点击照片链接时,改变<a>元素的href属性.并且阻止浏览器的默认行为. 动态改变描述文字,在图片下方增加P标签.通过获 ...
- 前端开发bower包管理器
Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,他可以很好的帮助你帮你解决js的依赖管理,比如jquery angular bootstrap 等等. 可以很方便的 ...
- Problem 1010 - 素数环问题
#include<iostream> #include<string> #include<algorithm> #include<vector> #in ...