zoukankan      html  css  js  c++  java
  • hdu 1754

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

    直接线段树。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 const int maxn=200006,maxm=5010;
     6 int a[maxn],ans[maxm];
     7 struct{
     8     int lef,rig,sum;
     9 } tree[maxn*4];
    10 int n, ANS;
    11 
    12 int my_max(int x,int y)
    13 {
    14     return x>y?x:y;
    15 }
    16 
    17 void build(int x,int y,int now)
    18 {
    19     tree[now].lef=x;
    20     tree[now].rig=y;
    21     if(x==y){
    22         scanf("%d",&tree[now].sum);
    23         return ;
    24     }
    25     int mid=(x+y)>>1;
    26     build( x, mid, now<<1);
    27     build( mid+1, y, now<<1|1);
    28     tree[now].sum=my_max(tree[now<<1].sum,tree[now<<1|1].sum);
    29 }
    30 
    31 void add(int x,int y,int now,int goal,int add_num)
    32 {
    33     if(x==y){
    34         tree[now].sum=add_num;
    35         return ;
    36     }
    37     int mid=(x+y)>>1;
    38     if(goal<=mid){
    39         add( x, mid, now<<1, goal, add_num);
    40     }
    41     else{
    42         add( mid+1, y, now<<1|1, goal, add_num);
    43     }
    44     tree[now].sum=my_max(tree[now<<1|1].sum,tree[now<<1].sum);
    45 }
    46 
    47 void query(int x,int y,int now, int eachx,int eachy)
    48 {
    49     if(x>=eachx&&y<=eachy){
    50         ANS=my_max(ANS,tree[now].sum);
    51         return ;
    52     }
    53     int mid=(x+y)>>1;
    54     if(mid>=eachy){
    55         query( x, mid, now<<1, eachx, eachy);
    56     }
    57     else if(mid<eachx){
    58         query( mid+1, y, now<<1|1, eachx, eachy);
    59     }
    60     else{
    61         query( x, mid, now<<1, eachx, eachy);
    62         query( mid+1, y, now<<1|1, eachx, eachy);
    63     }
    64 }
    65 
    66 int main()
    67 {
    68     int m;
    69     while( ~scanf("%d%d",&n,&m)){
    70         char order[10];
    71         int num=0;
    72         build(1,n,1);
    73         int x,y;
    74         while(m--){
    75             scanf("%s",order);
    76             scanf("%d%d",&x,&y);
    77             if(order[0]=='U') add(1,n,1,x,y);
    78             if(order[0]=='Q'){
    79                 ANS=0;
    80                 query( 1, n, 1, x, y);
    81                 ans[++num]=ANS;
    82             }
    83         }
    84         for(int i=1;i<=num;i++){
    85             printf("%d
    ",ans[i]);
    86         }
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    automatic preferred max layout width
    UIActivityIndicatorView
    collectionview不能拖动
    消除找不到文件路径的警告
    保存图片到本地和相册
    svn上传.a文件
    UILabel copyWithZone:]: unrecognized selector sent to instance 0x7fd662d8f9b0
    NSString NSURL
    iOS 定位功能
    前端实现左右翻页功能Demo
  • 原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/9347894.html
Copyright © 2011-2022 走看看