HDU--5519 Sequence II (主席树)
题目链接 2016年长春ccpc I 题
题目大意 :
给你n(n≤2∗105n≤2∗105)个数,每个数的大小 0<Ai≤2∗10^5 0<Ai≤2∗10^5。
再给你m(m≤2∗105≤2∗105)个询问。对于每个询问输入l,r,表示Al...ArAl...Ar这个区间我们得到每个数第一次出现的位置下标的排列,
假设这个区间有k个不同的数,我们得到的排列是p1<p2<p3<...<pkp1<p2<p3<...<pk,叫你求第(k+1)/2这个数是所在的位置是哪个?
主席树正着插能得到每个区间不同数最后一次出现的位置,反着插的话可以得到每个不同数第一次出现的位置
然后就是查找区间k值
- #include<bits/stdc++.h>
- using namespace std;
- #define maxn 200005
- struct ac{
- int va,l,r;
- }tre[*maxn];
- int a[maxn],root[maxn],tot,fa[maxn];
- void init(){
- memset(root,,sizeof(root));
- memset(tre,,sizeof(tre));
- memset(fa,,sizeof(fa));
- tot=;
- }
- void updata(int l,int r,int &x,int y,int z,int va){
- tre[++tot]=tre[y];
- tre[tot].va+=va;
- x=tot;
- if(l==r) return ;
- ;
- if(z<=mid) updata(l,mid,tre[x].l,tre[y].l,z,va);
- ,r,tre[x].r,tre[y].r,z,va);
- }
- int query(int l,int r,int x,int k){
- if(l==r) return l;
- int s=tre[tre[x].l].va;
- ;
- if(k<=s){
- return query(l,mid,tre[x].l,k);
- }
- ,r,tre[x].r,k-s);
- }
- int getsum(int l,int r,int x,int y,int z){
- if(l==x&&y==r) return tre[z].va;
- ;
- if(y<=mid){
- return getsum(l,mid,x,y,tre[z].l);
- }else if(x>mid){
- ,r,x,y,tre[z].r);
- }else{
- ,r,mid+,y,tre[z].r);
- }
- }
- int main(){
- ;
- cin>>t;
- while(t--){
- init();
- int n,m;
- cin>>n>>m;
- ;j<=n;j++){
- scanf("%d",&a[j]);
- }
- ;j--){
- if(fa[a[j]]){
- updata(,n,root[j],root[j+],fa[a[j]],-);
- updata(,n,root[j],root[j],j,);
- }else{
- updata(,n,root[j],root[j+],j,);
- }
- fa[a[j]]=j;
- }
- ;
- printf("Case #%d:",cnt++);
- ;j<m;j++){
- int x,y,l,r;
- scanf("%d%d",&x,&y);
- x=(x+ans)%n+;
- y=(y+ans)%n+;
- l=min(x,y);r=max(x,y);
- ,n,l,r,root[l]);
- s=(s+)/;
- ans=query(,n,root[l],s);
- printf(" %d",ans);
- }
- printf("\n");
- }
- }
HDU--5519 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(主席树)
Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...
- hdu 5147 Sequence II【树状数组/线段树】
Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- 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掉. 主席树可解 ...
- HDU 5919 - Sequence II (2016CCPC长春) 主席树 (区间第K小+区间不同值个数)
HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2 ...
- 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[ ...
- hdu 5919 Sequence II (可持久化线段树)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5919 大致题意: 给你一个长度为n的序列,q个询问,每次询问是给你两个数x,y,经过与上一次的答案进行运算 ...
- hdu 5147 Sequence II 树状数组
Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- hdu 5147 Sequence II (树状数组 求逆序数)
题目链接 Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- laravel中migration 数据迁移
简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...
- 10分钟让你的代码更加pythonic
参考: https://blog.csdn.net/g8433373/article/details/80709116
- mysql从入门到精通
解决MySQL Got a packet bigger than 'max_allowed_packet' bytes 问题在一次性向mysql插入的数据过大,可在my.ini中修改max_allow ...
- QTP 自动化测试--定义变量
1 Dim suffixsuffix=get_currentdatetxt("001")
- JS--bom对象:borswer object model浏览器对象模型
bom对象:borswer object model浏览器对象模型 navigator获取客户机的信息(浏览器的信息) navigator.appName;获得浏览器的名称 window:窗口对象 a ...
- Lodop打印控件 超文本自动分页
Lodop打印控件打印html超文本,通常传入一个超文本内容可能会超过纸张,如果要拆分每页显示哪些然后手动分页比较麻烦,Lodop中的超文本都有自动分页的特点.自动分页的依据:1.超文本超过设置的打印 ...
- static类型的变量
c语言中变量的储存类型有以下四种 auto 如果没有定义储存类型 默认就是这个类型 比如 int a = 10; 储存类型就是 auto:编译器会跟你定义的位置,以及用途,自动帮你决定使用那 ...
- 深度学习中dropout策略的理解
现在有空整理一下关于深度学习中怎么加入dropout方法来防止测试过程的过拟合现象. 首先了解一下dropout的实现原理: 这些理论的解释在百度上有很多.... 这里重点记录一下怎么实现这一技术 参 ...
- Membership 介绍
ASP.NET成员资格为您提供了验证和存储用户凭据的内置方式.因此,ASP.NET成员可以帮助您管理网站中的用户身份验证.您可以使用ASP.NET表单身份验证使用ASP.NET成员身份,方法是使用AS ...
- Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...