题目链接 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值

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 200005
  4. struct ac{
  5. int va,l,r;
  6. }tre[*maxn];
  7. int a[maxn],root[maxn],tot,fa[maxn];
  8. void init(){
  9. memset(root,,sizeof(root));
  10. memset(tre,,sizeof(tre));
  11. memset(fa,,sizeof(fa));
  12. tot=;
  13. }
  14. void updata(int l,int r,int &x,int y,int z,int va){
  15. tre[++tot]=tre[y];
  16. tre[tot].va+=va;
  17. x=tot;
  18. if(l==r) return ;
  19. ;
  20. if(z<=mid) updata(l,mid,tre[x].l,tre[y].l,z,va);
  21. ,r,tre[x].r,tre[y].r,z,va);
  22. }
  23. int query(int l,int r,int x,int k){
  24. if(l==r) return l;
  25. int s=tre[tre[x].l].va;
  26. ;
  27. if(k<=s){
  28. return query(l,mid,tre[x].l,k);
  29. }
  30. ,r,tre[x].r,k-s);
  31. }
  32. int getsum(int l,int r,int x,int y,int z){
  33. if(l==x&&y==r) return tre[z].va;
  34. ;
  35. if(y<=mid){
  36. return getsum(l,mid,x,y,tre[z].l);
  37. }else if(x>mid){
  38. ,r,x,y,tre[z].r);
  39. }else{
  40. ,r,mid+,y,tre[z].r);
  41. }
  42. }
  43. int main(){
  44. ;
  45. cin>>t;
  46. while(t--){
  47. init();
  48. int n,m;
  49. cin>>n>>m;
  50. ;j<=n;j++){
  51. scanf("%d",&a[j]);
  52. }
  53. ;j--){
  54. if(fa[a[j]]){
  55. updata(,n,root[j],root[j+],fa[a[j]],-);
  56. updata(,n,root[j],root[j],j,);
  57. }else{
  58. updata(,n,root[j],root[j+],j,);
  59. }
  60. fa[a[j]]=j;
  61. }
  62. ;
  63. printf("Case #%d:",cnt++);
  64. ;j<m;j++){
  65. int x,y,l,r;
  66. scanf("%d%d",&x,&y);
  67. x=(x+ans)%n+;
  68. y=(y+ans)%n+;
  69. l=min(x,y);r=max(x,y);
  70. ,n,l,r,root[l]);
  71. s=(s+)/;
  72. ans=query(,n,root[l],s);
  73. printf(" %d",ans);
  74. }
  75. printf("\n");
  76. }
  77. }

HDU--5519 Sequence II (主席树)的更多相关文章

  1. HDU 5919 Sequence II 主席树

    Sequence II Problem Description   Mr. Frog has an integer sequence of length n, which can be denoted ...

  2. HDU5919 Sequence II(主席树)

    Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...

  3. hdu 5147 Sequence II【树状数组/线段树】

    Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...

  4. HDU 5919 Sequence II(主席树+逆序思想)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  5. HDU 5919 -- Sequence II (主席树)

    题意: 给一串数字,每个数字的位置是这个数第一次出现的位置. 每个询问对于序列的一个子区间,设一共有k个不同的数,求第ceil(k/2)个数的位置. 因为强制在线,所以离线乱搞pass掉. 主席树可解 ...

  6. HDU 5919 - Sequence II (2016CCPC长春) 主席树 (区间第K小+区间不同值个数)

    HDU 5919 题意: 动态处理一个序列的区间问题,对于一个给定序列,每次输入区间的左端点和右端点,输出这个区间中:每个数字第一次出现的位子留下, 输出这些位子中最中间的那个,就是(len+1)/2 ...

  7. 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[ ...

  8. hdu 5919 Sequence II (可持久化线段树)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5919 大致题意: 给你一个长度为n的序列,q个询问,每次询问是给你两个数x,y,经过与上一次的答案进行运算 ...

  9. hdu 5147 Sequence II 树状数组

    Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  10. hdu 5147 Sequence II (树状数组 求逆序数)

    题目链接 Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. laravel中migration 数据迁移

    简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...

  2. 10分钟让你的代码更加pythonic

    参考: https://blog.csdn.net/g8433373/article/details/80709116

  3. mysql从入门到精通

    解决MySQL Got a packet bigger than 'max_allowed_packet' bytes 问题在一次性向mysql插入的数据过大,可在my.ini中修改max_allow ...

  4. QTP 自动化测试--定义变量

    1 Dim suffixsuffix=get_currentdatetxt("001")

  5. JS--bom对象:borswer object model浏览器对象模型

    bom对象:borswer object model浏览器对象模型 navigator获取客户机的信息(浏览器的信息) navigator.appName;获得浏览器的名称 window:窗口对象 a ...

  6. Lodop打印控件 超文本自动分页

    Lodop打印控件打印html超文本,通常传入一个超文本内容可能会超过纸张,如果要拆分每页显示哪些然后手动分页比较麻烦,Lodop中的超文本都有自动分页的特点.自动分页的依据:1.超文本超过设置的打印 ...

  7. static类型的变量

    c语言中变量的储存类型有以下四种 auto  如果没有定义储存类型  默认就是这个类型  比如  int a = 10;  储存类型就是 auto:编译器会跟你定义的位置,以及用途,自动帮你决定使用那 ...

  8. 深度学习中dropout策略的理解

    现在有空整理一下关于深度学习中怎么加入dropout方法来防止测试过程的过拟合现象. 首先了解一下dropout的实现原理: 这些理论的解释在百度上有很多.... 这里重点记录一下怎么实现这一技术 参 ...

  9. Membership 介绍

    ASP.NET成员资格为您提供了验证和存储用户凭据的内置方式.因此,ASP.NET成员可以帮助您管理网站中的用户身份验证.您可以使用ASP.NET表单身份验证使用ASP.NET成员身份,方法是使用AS ...

  10. Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线

    在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...