• bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI


    题目链接1 题目链接2

    主席树模板题

    两题有细节不同

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<string>
     7 #include<cmath>
     8 #include<ctime>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<set>
    13 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
    14 #define re(i,l,r) for(int i=(l);i<=(r);i++)
    15 #define Clear(a,b) memset(a,b,sizeof(a))
    16 #define inout(x) printf("%d",(x))
    17 #define douin(x) scanf("%lf",&x)
    18 #define strin(x) scanf("%s",(x))
    19 #define LLin(x) scanf("%lld",&x)
    20 #define op operator
    21 #define CSC main
    22 typedef unsigned long long ULL;
    23 typedef const int cint;
    24 typedef long long LL;
    25 using namespace std;
    26 void inin(int &ret)
    27 {
    28     ret=0;int f=0;char ch=getchar();
    29     while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
    30     while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();
    31     ret=f?-ret:ret;
    32 }
    33 int root[500050],l[10000010],r[10000010],sum[10000010];
    34 int n,m,ed;
    35 void update(int ll,int rr,int x,int &y,int xx)
    36 {
    37     y=++ed,sum[y]=sum[x]+1;
    38     if(ll==rr)return ;
    39     l[y]=l[x],r[y]=r[x];
    40     int mid=(ll+rr)>>1;
    41     if(xx<=mid)update(ll,mid,l[x],l[y],xx);
    42     else update(mid+1,rr,r[x],r[y],xx);
    43 }
    44 int query(int L,int R)
    45 {
    46     int ll=1,rr=n,mid,x=root[L-1],y=root[R],temp=(R-L+1)>>1;
    47     while(ll<rr)
    48     {
    49         if(sum[y]-sum[x]<=temp)return 0;mid=(ll+rr)>>1;
    50         if(sum[l[y]]-sum[l[x]]>temp)rr=mid,x=l[x],y=l[y];
    51         else if(sum[r[y]]-sum[r[x]]>temp)ll=mid+1,x=r[x],y=r[y];
    52         else return 0;
    53     }
    54     return ll;
    55 }
    56 int CSC()
    57 {
    58     inin(n),inin(m);
    59     re(i,1,n)
    60     {
    61         int x;inin(x);
    62         update(1,n,root[i-1],root[i],x);
    63     }
    64     re(i,1,m)
    65     {
    66         int ll,rr;inin(ll),inin(rr);
    67         printf("%d
    ",query(ll,rr));
    68     }
    69     return 0;
    70 }
    bzoj3524
     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<string>
     7 #include<cmath>
     8 #include<ctime>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<set>
    13 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
    14 #define re(i,l,r) for(int i=(l);i<=(r);i++)
    15 #define Clear(a,b) memset(a,b,sizeof(a))
    16 #define inout(x) printf("%d",(x))
    17 #define douin(x) scanf("%lf",&x)
    18 #define strin(x) scanf("%s",(x))
    19 #define LLin(x) scanf("%lld",&x)
    20 #define op operator
    21 #define CSC main
    22 typedef unsigned long long ULL;
    23 typedef const int cint;
    24 typedef long long LL;
    25 using namespace std;
    26 void inin(int &ret)
    27 {
    28     ret=0;int f=0;char ch=getchar();
    29     while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
    30     while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();
    31     ret=f?-ret:ret;
    32 }
    33 int root[500050],l[10000010],r[10000010],sum[10000010];
    34 int n,m,ed;
    35 void update(int ll,int rr,int x,int &y,int xx)
    36 {
    37     y=++ed,sum[y]=sum[x]+1;
    38     if(ll==rr)return ;
    39     l[y]=l[x],r[y]=r[x];
    40     int mid=(ll+rr)>>1;
    41     if(xx<=mid)update(ll,mid,l[x],l[y],xx);
    42     else update(mid+1,rr,r[x],r[y],xx);
    43 }int lim;
    44 int query(int L,int R)
    45 {
    46     if(L>R)swap(L,R);
    47     int ll=1,rr=lim,mid,x=root[L-1],y=root[R],temp=(R-L+1)>>1;
    48     while(ll!=rr)
    49     {
    50         if(sum[y]-sum[x]<=temp)return 0;mid=(ll+rr)>>1;
    51         if(sum[l[y]]-sum[l[x]]>temp)rr=mid,x=l[x],y=l[y];
    52         else if(sum[r[y]]-sum[r[x]]>temp)ll=mid+1,x=r[x],y=r[y];
    53         else return 0;
    54     }
    55     return ll;
    56 }
    57 int CSC()
    58 {
    59     inin(n),inin(lim);
    60     re(i,1,n)
    61     {
    62         int x;inin(x);
    63         update(1,lim,root[i-1],root[i],x);
    64     }inin(m);
    65     re(i,1,m)
    66     {
    67         int ll,rr;inin(ll),inin(rr);
    68         int ans=query(ll,rr);if(ans)cout<<"yes ";else cout<<"no
    ";
    69         if(ans)printf("%d
    ",ans);
    70     }
    71     return 0;
    72 }
    bzoj2223
  • 相关阅读:
    2014第5周一
    2014第4周日
    2014第4周六
    underscore.js
    2014第4周四
    2014第4周三
    2014年第2周二
    POj 3126 Prime Path
    Oracle EBS 入门
    HDU1698_Just a Hook(线段树/成段更新)
  • 原文地址:https://www.cnblogs.com/HugeGun/p/5176999.html
Copyright © 2020-2023  润新知