• uva 12299 RMQ with Shifts


     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=100000+5;
     6 int num[maxn<<4];
     7 int tmp[maxn];
     8 int indice[50];
     9 int tot;
    10 void push_up(int rt)
    11 {
    12     num[rt]=min(num[rt<<1],num[rt<<1|1]);
    13 }
    14 void build(int l,int r,int rt)
    15 {
    16     if(l==r)
    17     {
    18         scanf("%d",&num[rt]);
    19         tmp[tot++]=num[rt];
    20         return ;
    21     }
    22     int m=(l+r)>>1;
    23     build(l,m,rt<<1);
    24     build(m+1,r,rt<<1|1);
    25     push_up(rt);
    26 }
    27 void update(int x,int y,int l,int r,int rt)
    28 {
    29     if(l==r)
    30     {
    31         num[rt]=y;
    32         return ;
    33     }
    34     int m=(l+r)>>1;
    35     if(x<=m) update(x,y,l,m,rt<<1);
    36     else update(x,y,m+1,r,rt<<1|1);
    37     push_up(rt);
    38 }
    39 int query(int L,int R,int l,int r,int rt)
    40 {
    41     if(L<=l&&r<=R)
    42     {
    43         return num[rt];
    44     }
    45     int m=(l+r)>>1;
    46     if(R<=m) return query(L,R,l,m,rt<<1);
    47     if(L>m) return query(L,R,m+1,r,rt<<1|1);
    48     int a=query(L,R,l,m,rt<<1);
    49     int b=query(L,R,m+1,r,rt<<1|1);
    50     return min(a,b);
    51 }
    52 int main()
    53 {
    54     int n,q;
    55     scanf("%d%d",&n,&q);
    56     tot=1;
    57     build(1,n,1);
    58     while(q--)
    59     {
    60         getchar();
    61         int cnt=0;
    62         char cmd;
    63         cmd=getchar();
    64         if(cmd=='q')
    65         {
    66             while(cmd!='(')
    67                     cmd=getchar();
    68             while(cmd!=')')
    69                 scanf("%d%c",&indice[cnt++],&cmd);
    70             printf("%d
    ",query(indice[0],indice[1],1,n,1));
    71         }
    72         else
    73         {
    74             while(cmd!='(')
    75                     cmd=getchar();
    76             while(cmd!=')')
    77                 scanf("%d%c",&indice[cnt++],&cmd);
    78             int temp=tmp[indice[0]];
    79             for(int i=0;i<cnt-1;i++)
    80                 tmp[indice[i]]=tmp[indice[i+1]];
    81             tmp[indice[cnt-1]]=temp;
    82             for(int i=0;i<cnt;i++)
    83                 update(indice[i],tmp[indice[i]],1,n,1);
    84         }
    85     }
    86     return 0;
    87 }
  • 相关阅读:
    行业动态 | Instagram: 从Redis到Cassandra成功节省75%的成本
    技术基础 | 有关K8ssandra的那些事儿
    技术基础 | 重要指标和告警
    Cassandra与职业发展 | 阿里云栾小凡 × 蔚来汽车张旭东 × 网龙阙乃祯
    Cassandra与Kubernetes
    为何选择云原生?
    区分NoSQL数据库
    什么是NoSQL
    JMeter学习(一)JMeter的安装和目录解析
    CentOS 7 nfs客户端挂载问题
  • 原文地址:https://www.cnblogs.com/sooflow/p/3307558.html
Copyright © 2020-2023  润新知