HDU5919 Sequence II(主席树)
In the i-th query, you are given two integers lili and riri. Consider the subsequence ali,ali+1,ali+2,⋯,ariali,ali+1,ali+2,⋯,ari.
We can denote the positions(the positions according to the original sequence) where an integer appears first in this subsequence as p(i)1,p(i)2,⋯,p(i)kip1(i),p2(i),⋯,pki(i) (in ascending order, i.e.,p(i)1<p(i)2<⋯<p(i)kip1(i)<p2(i)<⋯<pki(i)).
Note that kiki is the number of different integers in this subsequence. You should output p(i)⌈ki2⌉p⌈ki2⌉(i)for the i-th query.
InputIn the first line of input, there is an integer T (T≤2T≤2) denoting the number of test cases.
Each test case starts with two integers n (n≤2×105n≤2×105) and m (m≤2×105m≤2×105). There are n integers in the next line, which indicate the integers in the sequence(i.e., a1,a2,⋯,an,0≤ai≤2×105a1,a2,⋯,an,0≤ai≤2×105).
There are two integers lili and riri in the following m lines.
However, Mr. Frog thought that this problem was too young too simple so he became angry. He modified each query to l‘i,r‘i(1≤l‘i≤n,1≤r‘i≤n)li‘,ri‘(1≤li‘≤n,1≤ri‘≤n). As a result, the problem became more exciting.
We can denote the answers as ans1,ans2,⋯,ansmans1,ans2,⋯,ansm. Note that for each test case ans0=0ans0=0.
You can get the correct input li,rili,ri from what you read (we denote them as l‘i,r‘ili‘,ri‘)by the following formula:
OutputYou should output one single line for each test case.
For each test case, output one line “Case #x: p1,p2,⋯,pmp1,p2,⋯,pm”, where x is the case number (starting from 1) and p1,p2,⋯,pmp1,p2,⋯,pm is the answer.Sample Input
2
5 2
3 3 1 5 4
2 2
4 4
5 2
2 5 2 1 2
2 3
2 4
Sample Output
Case #1: 3 3
Case #2: 3 1
Hint
题解:
题目意思是:给你n个数,然后m组询问(强制在线),每组询问L,R。
让你求L到R区间内的去重后的中位数所在的位置。
思路:考虑使用主席树来倒着将数组里面的数字插入主席树,每次插入一个数字a[i],在该树的位置 i 加一,然后判断其是否前面出现过,如果出现过,则在前一棵树的pre[a[i]]的位置减一;
然后只要查询root[L]的L到R区间得和就是L到R区间的数字的种类,然后再去查找root[L]中的第K小的数字在那个位置即可。
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
#define mkp make_pair
typedef long long ll;
const int INF=0x3f3f3f3f;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int maxn=2e5+;
int T,n,m,cnt,a[maxn],rt[maxn],pre[maxn],ans[maxn];
struct Node{
int ls,rs;
int sum;
} tr[maxn*]; void update(int &x,int y,int l,int r,int pos,int val)
{
tr[++cnt]=tr[y];tr[cnt].sum+=val;x=cnt;
if(l==r) return ;
int mid=l+r>>;
if(pos<=mid) update(tr[x].ls,tr[y].ls,l,mid,pos,val);
else update(tr[x].rs,tr[y].rs,mid+,r,pos,val);
}
int Query(int t,int l,int r,int L,int R)
{
if(L<=l&&r<=R) return tr[t].sum;
int mid=l+r>>,ret=;
if(L<=mid) ret+=Query(tr[t].ls,l,mid,L,R);
if(R>mid) ret+=Query(tr[t].rs,mid+,r,L,R);
return ret;
} int GetKth(int t,int l,int r,int k)
{
if(l==r) return l;
int mid=l+r>>,num=tr[tr[t].ls].sum;
if(k<=num) return GetKth(tr[t].ls,l,mid,k);
else return GetKth(tr[t].rs,mid+,r,k-num);
} int main()
{
T=read();
for(int cas=;cas<=T;++cas)
{
memset(pre,,sizeof(pre));
memset(rt,,sizeof(rt));
n=read();m=read(); cnt=;
for(int i=;i<=n;++i) a[i]=read();
int L,R; ans[]=; for(int i=n;i>=;--i)
{
if(!pre[a[i]]) update(rt[i],rt[i+],,n,i,),pre[a[i]]=i;
else
{
update(rt[i],rt[i+],,n,i,);
update(rt[i],rt[i],,n,pre[a[i]],-);
pre[a[i]]=i;
}
}
for(int i=;i<=m;++i)
{
L=read();R=read();
L=((L+ans[i-])%n)+;
R=((R+ans[i-])%n)+;
if(L>R) swap(L,R);
int num=Query(rt[L],,n,L,R)+>>;
ans[i]=GetKth(rt[L],,n,num);
}
printf("Case #%d:",cas);
for(int i=;i<m;++i) printf(" %d",ans[i]);
printf(" %d\n",ans[m]);
} return ;
}
HDU5919 Sequence II(主席树)的更多相关文章
- HDU 5919 Sequence II 主席树
		
Sequence II Problem Description Mr. Frog has an integer sequence of length n, which can be denoted ...
 - [HDU5919]Sequence II
		
[HDU5919]Sequence II 试题描述 Mr. Frog has an integer sequence of length n, which can be denoted as a1,a ...
 - hdu_5919_Sequence II(主席树)
		
题目链接:hdu_5919_Sequence II 题意: 给你n个数,m个询问,每次问你一个区间中每一种数在区间中第一次出现的位置的中位数,强制在线. 题解: 一看就是主席树搞,不过这里要询问第一次 ...
 - hdu 5147 Sequence II【树状数组/线段树】
		
Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
 - F. Greedy Sequence(主席树区间k的后继)(The Preliminary Contest for ICPC Asia Nanjing 2019)
		
题意: 查找区间k的后继. 思路: 直接主席树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio&g ...
 - HDU 5919 Sequence II(主席树+逆序思想)
		
Sequence II Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
 - HDU 5919 -- Sequence II (主席树)
		
题意: 给一串数字,每个数字的位置是这个数第一次出现的位置. 每个询问对于序列的一个子区间,设一共有k个不同的数,求第ceil(k/2)个数的位置. 因为强制在线,所以离线乱搞pass掉. 主席树可解 ...
 - Sequence II HDU - 5919(主席树)
		
Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...
 - HDU 5919 Sequence II(主席树)题解
		
题意:有A1 ~ An组成的数组,给你l r,L = min((l + ans[i - 1]) % n + 1, (r + ans[i - 1]) % n + 1),R = max((l + ans[ ...
 
随机推荐
- css字体图标的制作
			
我介绍的这个办法是直接在 "阿里巴巴图标库"中制作的,方便快捷 1. 首先到 "阿里巴巴图标库"中找到你想要的图片,然后选择加入购物车 接着我们点击右上角的购物 ...
 - centos下安装composer
			
centos下,yum 安装没效果,按照官网的安装方法: curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/ ...
 - 深入ObjC GCD中的dispatch group工作原理。
			
本文是基于GCD的支持库libdispatch的源代码分析的结果或是用于作为源代码阅读的参考,尽量不帖代码,力求用UML图来说明工作流. 本文参考的源代码版本为v501.20.1,如有兴趣请自行到苹果 ...
 - PHP 的面向对象 与 类
			
面向对象 == OO 学习面向对象 == XXOO;[学习使我快乐!] <!--附一个demo类的实例化--> http://note.youdao.com/noteshare?id=38 ...
 - 01-MongoDB数据库基础
			
一.MongoDB数据库基础 1.MongoDB数据库介绍 什么是MongoDB? MongoDB是非关系型数据库中的一种,是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情 ...
 - JavaWeb04-JSP及会话跟踪技术
			
JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1.2 JSP的 ...
 - SpringBoot源码学习系列之SpringMVC自动配置
			
目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...
 - elementui 模态框  拖动
			
第一步引入import elDragDialog from "@/directive/el-dragDialog";第二步 在export default中声明directives ...
 - 【Luogu P3388】割点模板
			
Luogu P3388 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合. 如果某个割点集合只含有一个顶点X(也即{X ...
 - C语言之修改常量
			
前言:指针!菜鸟的终点,高手的起点.漫谈一些进阶之路上的趣事:记录一些语言本身的特性以及思想,没有STL,也没有API! 0x01: 程序内存中的存储划分 对于程序在内存中是如何分布的,网上有多个解释 ...