• bzoj2223 [Coci 2009]PATULJCI (主席树)


    2223: [Coci 2009]PATULJCI

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 1253  Solved: 533
    [Submit][Status][Discuss]

    Description

    HINT

     输入第二个整数是序列中权值的范围Lim,即1<=ai(1<=i<=n)<=Lim,1<=Lim<=10000。

     

     

    主席树模板dearu;

    蒟蒻只能码板子了啊(摊);

     

    ↓代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<queue>
     9 #include<map>
    10 #define N 300039
    11 #define inf 0x3f3f3f3f
    12 #define ll long long 
    13 using namespace std;
    14 struct seg
    15 {
    16     int ls,rs,cnt;
    17 }tree[N<<4];
    18 int val[N],tot,root[N];
    19 void build(int k,int l,int r)
    20 {
    21     tree[k].cnt=0;
    22     if(l==r)
    23     {
    24         return;
    25     }
    26     int mid=(l+r)>>1;
    27     build(tree[k].ls=++tot,l,mid);
    28     build(tree[k].rs=++tot,mid+1,r);
    29 }
    30 void update(int las,int now,int l,int r,int v)
    31 {
    32     if(l==r)
    33     {
    34         tree[now].cnt=tree[las].cnt+1;
    35         return;
    36     }
    37     int mid=(l+r)>>1;
    38     if(mid>=v)
    39     {
    40         tree[now].rs=tree[las].rs;
    41         update(tree[las].ls,tree[now].ls=++tot,l,mid,v);
    42     }
    43     else
    44     {
    45         tree[now].ls=tree[las].ls;
    46         update(tree[las].rs,tree[now].rs=++tot,mid+1,r,v);
    47     }
    48     tree[now].cnt=tree[tree[now].ls].cnt+tree[tree[now].rs].cnt;
    49 }
    50 int query(int las,int now,int k,int l,int r)
    51 {
    52     if(l==r)
    53     {
    54         return l;
    55     }
    56     int mid=(l+r)>>1;
    57     if(tree[tree[now].ls].cnt-tree[tree[las].ls].cnt>k)
    58     {
    59         return query(tree[las].ls,tree[now].ls,k,l,mid);
    60     }
    61     else if(tree[tree[now].rs].cnt-tree[tree[las].rs].cnt>k)
    62     {
    63         return query(tree[las].rs,tree[now].rs,k,mid+1,r);
    64     }
    65     else
    66     {
    67         return -1;
    68     }
    69 }
    70 int main()
    71 {
    72     int n,m,lim,a,b,c;
    73     scanf("%d%d",&n,&lim);
    74     build(root[0]=++tot,1,lim);
    75     for(a=1;a<=n;a++)
    76     {
    77         scanf("%d",&b);
    78         update(root[a-1],root[a]=++tot,1,lim,b);
    79     }
    80     scanf("%d",&m);
    81     while(m--)
    82     {
    83         scanf("%d%d",&a,&b);
    84         c=query(root[a-1],root[b],(b-a+1)/2,1,lim);
    85         if(c==-1)
    86         {
    87             printf("no
    ");
    88         }
    89         else
    90         {
    91             printf("yes %d
    ",c);
    92         }
    93     }
    94     return 0;
    95 }
    bzoj2223 mogical tree
    散りぬべき 時知りてこそ 世の中の 花も花なれ 人も人なれ
  • 相关阅读:
    【Beta阶段】第一次Scrum Meeting
    【Beta阶段】第二次Scrum Meeting
    【Beta阶段】第三次Scrum Meeting
    [BUAA软工]Alpha阶段事后分析
    [BUAA软工]Alpha阶段测试报告
    [北航软工]团队贡献分规则
    Windows Server 2008 R2之二从介质安装 AD DS
    Windows Server 2008 R2之一活动目录服务部署
    DC84问
    获取命令行指定参数
  • 原文地址:https://www.cnblogs.com/Sinogi/p/7511937.html
Copyright © 2020-2023  润新知