zoukankan      html  css  js  c++  java
  • uva 1513 Movie collection

     1 #include<cstdio>
     2 #include<cstring>
     3 const int maxn=100000+5;
     4 int  sum[maxn<<4];
     5 int add[maxn<<4];
     6 int num_index[maxn];
     7 void  push_up(int rt)
     8 {
     9     sum[rt]=sum[rt<<1]+sum[rt<<1|1];
    10 }
    11 void push_down(int rt,int len)
    12 {
    13     if(add[rt])
    14     {
    15         sum[rt<<1]=add[rt]*(len-len/2);
    16         sum[rt<<1|1]=add[rt]*(len/2);
    17         add[rt<<1]=add[rt<<1|1]=add[rt];
    18         add[rt]=0;
    19     }
    20 }
    21 void update(int L,int R,int inc,int l,int r,int rt)
    22 {
    23     if(L<=l&&r<=R)
    24     {
    25         sum[rt]+=inc*(r-l+1);
    26         add[rt]+=inc;
    27         return ;
    28     }
    29     push_down(rt,r-l+1);
    30     int m=(l+r)>>1;
    31     if(L<=m) update(L,R,inc,l,m,rt<<1);
    32     if(R>m) update(L,R,inc,m+1,r,rt<<1|1);
    33     push_up(rt);
    34 }
    35 int query(int L,int R,int l,int r,int rt)
    36 {
    37     if(L<=l&&r<=R)
    38     {
    39         return sum[rt];
    40     }
    41     push_down(rt,r-l+1);
    42     int ret=0;
    43     int m=(l+r)>>1;
    44     if(l<=m) ret+=query(L,R,l,m,rt<<1);
    45     if(R>m) ret+=query(L,R,m+1,r,rt<<1|1);
    46     return ret;
    47 }
    48 int n,m;
    49 int main()
    50 {
    51     int t;
    52     scanf("%d",&t);
    53     while(t--)
    54     {
    55         scanf("%d%d",&n,&m);
    56         memset(sum,0,sizeof(sum));
    57         memset(add,0,sizeof(add));
    58         update(1+maxn,n+maxn,1,1,2*maxn-1,1);
    59         int a;
    60         for(int i=1;i<=n;i++)
    61             num_index[i]=maxn+i;
    62         int top=maxn;
    63         for(int i=0;i<m;i++)
    64         {
    65             scanf("%d",&a);
    66             printf("%d",query(1,num_index[a]-1,1,2*maxn-1,1));
    67             if(i!=m-1) printf(" ");
    68             update(num_index[a],num_index[a],-1,1,2*maxn-1,1);
    69             num_index[a]=top--;
    70             update(num_index[a],num_index[a],1,1,2*maxn-1,1);
    71         }
    72         printf("
    ");
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    lsmod命令详解
    init命令详解
    runlevel 命令详解
    nohup命令详解
    nice和renice命令详解
    pstree命令详解
    ps命令详解
    crontab命令详解
    pkill命令详解
    killall命令详解
  • 原文地址:https://www.cnblogs.com/sooflow/p/3307564.html
Copyright © 2011-2022 走看看