• 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 }
  • 相关阅读:
    Python异常处理
    python抽象类
    python传参*和**的区别
    python 多重继承构造函数调用顺序
    linux 自启动 | 三种方式自启动
    Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP
    Go 基础学习笔记 (5)| 数据类型说明与使用
    GO 基础学习笔记(4)| 参数传递
    生活问题 | 对华为畅玩手机5X进行升级
    markdown 语法
  • 原文地址:https://www.cnblogs.com/sooflow/p/3307564.html
Copyright © 2020-2023  润新知