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个块中小于 ...
随机推荐
- Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏
从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn.os.popen.popen2.commands. ...
- 64位开源处理器Rocket该人士介绍
最近大概读一点UCB发布时间Rocket处理器的源代码,的每个文件的源代码的功能有一定的一般理解,Mark一点点. Rocket是一家64bit标量处理器,5第一阶段管道,用途risc-v指令集.综合 ...
- Java中的守护线程 & 非守护线程(简介)
Java中的守护线程 & 非守护线程 守护线程 (Daemon Thread) 非守护线程,又称用户线程(User Thread) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守 ...
- careercup-链表 2.1
2.1 编写代码,移除未排序链表中的重复节点. 不使用临时缓存: 如果不允许使用临时的缓存(即不能使用额外的存储空间),那需要两个指针, 当第一个指针指向某个元素时,第二个指针把该元素后面与它相同的元 ...
- 传输层:TCP UDP SCTP
总图 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员.图2-1展示了这些协议的概况. 图2-1中同时展示了IPV4和IPV6.从右向左看该图,最右边的5个网络应 ...
- WIN32 根据程序名(映像名称)终止外部程序
场景: 1.有时候需要调用外部程序,但是外部程序有可能崩溃挂起,这样这个进程就没法结束,所以再在下次调用前需要先结束之前调用的. 2.没考虑到权限问题,应该是只能终止当前用户启动的进程. #inclu ...
- Linux下搭建Oracle11g RAC(7)----安装Oracle 软件
从此步骤开始,我们正式安装oracle软件: ① 以oracle用户登录图形界面,执行/home/oracle/database/runInstaller,进入OUI的图形安装界面: ② 进入OUI安 ...
- ZeroClipboard.swf
ZeroClipboard.config({ moviePath: "source/ZeroClipboard.swf", hove ...
- oc 获取当前时间
//获取当前日期 NSDate* date = [NSDate date]; NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init]; ...
- WCF 无法生成 client
在MVC中调用WCF 总是没有client 后来在网上查找原因,去掉Reuse type in referrenced assenbiles ,就可以生成代理代码.