zoukankan      html  css  js  c++  java
  • [HDU1754]I Hate It线段树裸题

    http://acm.hdu.edu.cn/showproblem.php?pid=1754

    解题关键:刚开始死活超时,最后发现竟然是ch,和t1、t2每次循环都定义的锅,以后养成建全局变量的习惯。

    注意背模板时,find时最后无赋值

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 struct node{
     5     int left,right,max;
     6 }tree[800002];
     7 int num[200002];
     8 char ch;
     9 int t1,t2;
    10 int build(int root,int left,int right){
    11     tree[root].left=left;
    12     tree[root].right=right;
    13     if(left==right) return tree[root].max=num[left];
    14     
    15     int a,b,mid;
    16     mid=(left+right)/2;
    17     a=build(2*root,left,mid);
    18     b=build(2*root+1,mid+1,right);
    19     return tree[root].max=max(a,b);
    20 }
    21 
    22 int find(int root,int left,int right){
    23     if(right<tree[root].left||left>tree[root].right) return 0;
    24     if(left<=tree[root].left&&tree[root].right<=right) return tree[root].max;
    25     
    26     int a,b;
    27     a=find(2*root,left,right);
    28     b=find(2*root+1,left,right);
    29     return max(a,b);//find时不能赋值 
    30 }
    31 
    32 int update(int root,int pos,int val){
    33     if(pos<tree[root].left||pos>tree[root].right) return tree[root].max;
    34     if(pos==tree[root].left&&pos==tree[root].right) return tree[root].max=val;
    35     
    36     int a,b;
    37     a=update(2*root,pos,val);
    38     b=update(2*root+1,pos,val);
    39     return tree[root].max=max(a,b);
    40 }
    41 int n,m;
    42 int main(){
    43     while(scanf("%d%d",&n,&m)!=EOF){
    44         memset(num,0,sizeof num);
    45         memset(tree,0,sizeof tree);
    46         for(int i=1;i<=n;i++){
    47             scanf("%d",num+i);
    48         }
    49         build(1,1,n);
    50         for(int i=0;i<m;i++){
    51             getchar();
    52             scanf("%c%d%d",&ch,&t1,&t2);
    53             if(ch=='Q'){
    54                 int res=find(1,t1,t2);
    55                 printf("%d
    ",res);
    56             }
    57             else{
    58                 update(1,t1,t2);
    59             }
    60         }
    61     }
    62     
    63 }
  • 相关阅读:
    linux(centos6.9) 安装mongoDB
    vue $refs
    vue $emit的使用方式
    docker上部署一个项目常用命令
    Nginx之Location匹配规则
    Github Packages和Github Actions实践之CI/CD
    消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局
    发布Jar包到maven中央仓库
    一些小Tip
    有风格的程序员,写有风格的代码
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/6815472.html
Copyright © 2011-2022 走看看