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的博客,未经允许,请勿转载,谢谢。

  • 相关阅读:
    使用Wireshark捕捉USB通信数据
    simtrace之探秘SIM卡中的世界
    极客DIY:RFID飞贼打造一款远距离渗透利器
    C118+Osmocom-bb+Openbts搭建小型基站
    天猫标的就是虚价,果然败家节啊
    为什么项目的jar包会和tomcat的jar包冲突?
    Spring-JDBC实现Contact的CRUD
    使用maven下载jar包的source和javadoc
    Spring-Context的注解实现依赖注入功能
    [html]三列居中自动伸缩的结构
  • 原文地址:https://www.cnblogs.com/PaperCloud/p/7134487.html
Copyright © 2011-2022 走看看