zoukankan      html  css  js  c++  java
  • UVa 12299 RMQ with Shifts

    题目链接:

    线段树,点修改。

      1 #include <cstdio>
      2 #include <cctype>
      3 #define lson l, m, rt << 1
      4 #define rson m + 1, r, ( rt << 1 ) | 1
      5 
      6 const int MAXN = 100010;
      7 const int INF = 2147483645;
      8 
      9 int tree[ MAXN << 2 ];
     10 
     11 int min( int a, int b )
     12 {
     13     return a < b ? a : b;
     14 }
     15 
     16 void PushUP( int rt )
     17 {
     18     tree[rt] = min( tree[rt << 1] , tree[ rt << 1 | 1 ] );
     19     return;
     20 }
     21 
     22 void build( int l, int r, int rt )
     23 {
     24     if ( l == r )
     25     {
     26         scanf( "%d", &tree[rt] );
     27         return;
     28     }
     29     int m = ( l + r ) >> 1;
     30     build(lson);
     31     build(rson);
     32     PushUP(rt);
     33 }
     34 
     35 void update( int p, int e, int l, int r, int rt )
     36 {
     37     if ( l == r )
     38     {
     39         tree[rt] = e;
     40         return;
     41     }
     42     int m = ( l + r ) >> 1;
     43     if ( p <= m ) update( p, e, lson );
     44     else update( p, e, rson );
     45     PushUP(rt);
     46     return;
     47 }
     48 
     49 void GetNum( int p, int &e, int l, int r, int rt )
     50 {
     51     if ( l == r )
     52     {
     53         e = tree[rt];
     54         return;
     55     }
     56     int m = ( l + r ) >> 1;
     57     if ( p <= m ) GetNum( p, e, lson );
     58     else GetNum( p, e, rson );
     59     return;
     60 }
     61 
     62 int Query( int L, int R, int l, int r, int rt )
     63 {
     64     if ( L <= l && R >= r )
     65        return tree[rt];
     66 
     67     int ret = INF;
     68     int m = ( l + r ) >> 1;
     69     if ( L <= m ) ret = min( ret, Query( L, R, lson ) );
     70     if ( R > m ) ret = min( ret, Query( L, R, rson ) );
     71     return ret;
     72 }
     73 
     74 int main()
     75 {
     76     int n, Q;
     77     char order[50];
     78     int addr[50], number[50];
     79     while ( ~scanf( "%d%d", &n, &Q ) )
     80     {
     81         build( 1, n, 1 );
     82         while ( Q-- )
     83         {
     84             scanf( "%s", order );
     85             if ( order[0] == 'q' )
     86             {
     87                 int x, y;
     88                 sscanf( order, "query(%d,%d)", &x, &y );
     89 //                printf("##%d %d\n", x, y);
     90                 printf( "%d\n", Query( x, y, 1, n, 1 ) );
     91             }
     92             else
     93             {
     94                 int cnt = 0;
     95                 for ( int i = 0; order[i]; )
     96                 {
     97                     if ( isdigit( order[i] ) )
     98                     {
     99                         int sum = 0;
    100                         while ( isdigit( order[i] ) )
    101                             sum = sum * 10 + order[i++] - '0';
    102                         addr[cnt++] = sum;
    103                     }
    104                     else ++i;
    105                 }
    106 
    107                 for ( int i = 0; i < cnt; ++i )
    108                 {
    109                //     printf( "=%d ", addr[i] );
    110                     GetNum( addr[i], number[i], 1, n, 1 );
    111                //     printf( "@%d\n", number[i] );
    112                 }
    113                 for ( int i = 0; i < cnt; ++i )
    114                 {
    115                     if ( i == cnt - 1 ) update( addr[i], number[0], 1, n, 1 );
    116                     else update( addr[i], number[i + 1], 1, n, 1 );
    117                 }
    118             }
    119         }
    120     }
    121     return 0;
    122 }
  • 相关阅读:
    Linux 下QT安装教程
    内核中断及按键驱动程序
    Linux 输入子系统原理理解(原创)
    深入分析Linux内核源码oss.org.cn/kernel-book/
    [MSDN]最新Win7 SP1简体中文所有版本下载
    递归打印级联目录
    递归与迭代学习(联级目录的创建与删除)
    PHP三种方法实现多文件上传
    PHP实现商城购物车类(SESSION+单例模式 )(亲测)
    PHP生成缩略图、验证码类封装
  • 原文地址:https://www.cnblogs.com/GBRgbr/p/2802026.html
Copyright © 2011-2022 走看看