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个块中小于 ...
随机推荐
- C# richTextBox编辑器
附件:http://files.cnblogs.com/xe2011/CSHARP_RichTextBoxEditor.rar 完整的转到这里 http://www.cnblogs.com/xe201 ...
- Spark1.0 安装
1.下载Scala wget http://www.scala-lang.org/files/archive/scala-2.10.3.tgz tar xvzf scala-2.10.3.tgz - ...
- ExecutorService与Executors例子的简单剖析(转)
对于多线程有了一点了解之后,那么来看看java.lang.concurrent包下面的一些东西.在此之前,我们运行一个线程都是显式调用了 Thread的start()方法.我们用concurrent下 ...
- android 65 文件访问权限
package com.itheima.createfile; import java.io.File; import java.io.FileNotFoundException; import ja ...
- 网络学习笔记----02--IGMP组播、ARP
IGMP组播 :在路由器的接口上运行,周期性扫描本网段是否有绑定某个多播地址的计算机. ARP,全称Address Resolution Protoco,将广播中的IP地址解析成MAC地址 查看MAC ...
- cocos2d-x Lua与OC互相调用
1. Lua 调用OC 先看例子: hello.lua: -- 点击回调函数 local function notifymenuCallbackTest() local luaoc = require ...
- Android开发之使用意图
意图的用途一般是连接活动,传递数据,从意图返回数据等,下面的例子就是利用意图来交互MainActivity和SecondActivity这两个活动. 效果图如下: 实现代码如下: MainActivi ...
- VC++ 获取windows系统的版本类型
vc中获取windows版本信息,一般是调用GetVersionEx 这个API函数来获取的,这个API需要OSVERSIONINFOEX 这个结构体作为参数,OSVERSIONINFOEX 的对应的 ...
- RedHat7搭建Nginx+Apache+PHP
Nginx做为前端服务器(本机IP:192.168.136.104),将访问PHP页面的动态请求转发给Apache服务器(只监听本地回环地址172.0.0.1:80) 安装Apache# yum -y ...
- 第二篇:web之前端之css
前端之css 前端之css 本节内容 css概述及引入 css选择器 css常用属性 1.css概述及引入 CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式 ...