zoukankan      html  css  js  c++  java
  • HDU 1754 I HATE IT

    线段树板子。。无lazy。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 #define mem(a,b) memset(a,b,sizeof(a))
    10 #define ll long long
    11 #define inf 1000000000
    12 #define maxn 40000
    13 #define eps 1e-12
    14 #define mod 1000000007
    15 #define N 3005
    16 inline int read()
    17 {
    18     int x=0,f=1;char ch=getchar();
    19     while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
    20     while(ch>='0'&&ch<='9') {x=10*x+ch-'0';ch=getchar();}
    21     return x*f;
    22 }
    23 int tree[800005];
    24 void build(int left,int right,int root)
    25 {
    26     if(left==right) tree[root]=read();
    27     else{
    28         int mid=(left+right)>>1;
    29         build(left,mid,root<<1);
    30         build(mid+1,right,root<<1|1);
    31         tree[root]=max(tree[root<<1],tree[root<<1|1]);
    32     }
    33 }
    34 void update(int p,int add,int left,int right,int root)
    35 {
    36     if(left==right) tree[root]=add;
    37     else{
    38         int mid=(left+right)>>1;
    39         if(p<=mid) update(p,add,left,mid,root<<1);
    40         else update(p,add,mid+1,right,root<<1|1);
    41         tree[root]=max(tree[root<<1],tree[root<<1|1]);
    42     }
    43 }
    44 int query(int x,int y,int left,int right,int root)
    45 {
    46     if(x<=left&&right<=y) return tree[root];
    47     else{
    48         int sum=0,mid=(left+right)>>1;
    49         if(x<=mid) sum=max(sum,query(x,y,left,mid,root<<1));
    50         if(y>mid) sum=max(sum,query(x,y,mid+1,right,root<<1|1)); 
    51         return sum;
    52     }
    53 }
    54 int main()
    55 {
    56     int n,m;
    57     while(~scanf("%d%d",&n,&m))
    58     {
    59         build(1,n,1);
    60         while(m--)
    61         {
    62             char op[3];  int x,y;
    63             scanf("%s%d%d",op,&x,&y);
    64             if(op[0]=='U') update(x,y,1,n,1);
    65             else printf("%d
    ",query(x,y,1,n,1));
    66         }
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    1.33 (累积互素数)
    1.33 (过滤累积和 求区间内所有素数之和)
    1.32 (更高层次的抽象! 乘法与加法本来就是一回事)
    1.31 (另一种求圆周率的算法)
    1.30 (递归的sum变迭代)
    习题1.29 (积分方法的优化---simpson规则)
    1.3.1 (对过程的抽象)
    SICP习题 1.23(素数查找的去偶数优化)
    SICP习题 1.22(素数)
    pom.xml
  • 原文地址:https://www.cnblogs.com/TYH-TYH/p/8903918.html
Copyright © 2011-2022 走看看