zoukankan      html  css  js  c++  java
  • UVA 12299 RMQ with shifts

    就是线段树的单点修改和区间查询。

    然而输入打了一个小时才弄清楚。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 #define MN 100000
     6 #define R return
     7 #define INF 0x3f3f3f3f
     8 char ch;
     9 inline int read(){
    10     int x = 0; ch=getchar();
    11     while(ch < '0'||ch > '9') ch=getchar();
    12     while(ch >='0'&&ch <='9') x = x*10  + ch - '0',ch = getchar();
    13     R x ;
    14 }
    15 int tree[MN*4+20];
    16 int n,q,a[MN+10],cha[35],cnt,l,r;
    17 void init(int t,int a,int b,int l,int add){
    18     int m=a+(b-a)/2;
    19     if(a==b){tree[t]=add;R;}
    20     if(m>=l) init(t<<1,a,m,l,add);
    21     if(m<l) init(t<<1|1,m+1,b,l,add);
    22     tree[t]=min(tree[t<<1],tree[t<<1|1]);
    23 }
    24 int query(int t,int a,int b,int l,int r){
    25     if(l<=a&&b<=r) R tree[t];
    26     int m=(a+b)/2,ans=INF;
    27     if(l<=m) ans=min(ans,query(t<<1,a,m,l,r));
    28     if(m<r) ans=min(ans,query(t<<1|1,m+1,b,l,r));
    29     R ans;
    30 }
    31 void evlos(bool k){
    32     if(k){
    33         l=read();r=read();
    34         printf("%d
    ",query(1,1,n,l,r));
    35     }
    36     if(!k){
    37         cnt=0; cha[++cnt]=read();
    38         while(ch==',') cha[++cnt]=read();
    39         cha[++cnt]=cha[1];
    40         for(int i=1;i<cnt;i++) init(1,1,n,cha[i],a[cha[i+1]]);
    41         int v=a[cha[1]];
    42         for(int i=1;i+1<cnt;i++) a[cha[i]]=a[cha[i+1]];
    43         a[cha[cnt-1]]=v;
    44     }
    45 }
    46 void solve(){
    47     bool k;
    48     ch=getchar();
    49     while(ch!='q'&&ch!='s') ch=getchar();
    50     if(ch=='q') k=1;
    51     if(ch=='s') k=0;
    52     while(ch!='(') ch=getchar();
    53     evlos(k);
    54 }
    55 int main(){
    56     n=read();q=read();
    57     for(int i=1;i<=n;i++) a[i]=read(),init(1,1,n,i,a[i]);
    58     while(q--) solve();
    59     R 0;
    60 }

     ——————————————————————————————————————————————————————————

    来自Paper Cloud的博客,未经允许,请勿转载,谢谢。

  • 相关阅读:
    【Spring】 AOP Base
    【Offer】[20] 【表示数值的字符串】
    【Offer】[19] 【字符串匹配】
    【设计模式】代理模式
    【LeetCode】[0002] 【两数之和】
    【Offer】[18-1] 【在O(1)时间内删除链表节点】
    【Offer】[18-2] 【删除链表中重复的节点】
    【Offer】[17] 【打印1到最大的n位数】
    【Offer】[16] 【数值的整数次方】
    python_内置函数
  • 原文地址:https://www.cnblogs.com/PaperCloud/p/7134487.html
Copyright © 2011-2022 走看看