• HDU 1754 I Hate It


    线段树单点更新模板题。

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

    这个实现的效率比较低。比大小必须写成函数才不会TLE。

    View Code
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #define N 500000
     5 struct node
     6 {
     7     int l,r; 
     8     int sum;
     9 }xtree[4*N];
    10 int max(int a,int b)
    11 {
    12     return a>b?a:b;
    13 }
    14 void pushup(int rn)
    15 {
    16     xtree[rn].sum=max(xtree[rn<<1].sum,xtree[rn<<1|1].sum);
    17 }
    18 void build(int l,int r,int rn)
    19 {
    20     xtree[rn].l = l;
    21     xtree[rn].r = r;
    22     if(l == r)
    23     {
    24         scanf("%d",&xtree[rn].sum);
    25         return ;
    26     }
    27     int mid=(l+r)>>1;
    28     build(l,mid,rn<<1);
    29     build(mid+1,r,rn<<1|1);
    30     pushup(rn);
    31 }
    32 void update(int num,int val,int rn)
    33 {
    34     if(xtree[rn].l==xtree[rn].r)
    35     {
    36         xtree[rn].sum =val;
    37         return ;
    38     }
    39     int mid=(xtree[rn].l+xtree[rn].r) >> 1;
    40     if(num>mid)
    41     {
    42         update(num,val,rn<<1|1);
    43     }
    44     else
    45     {
    46         update(num,val,rn<<1);
    47     }
    48  pushup(rn);
    49 }
    50 int que(int le,int ri,int rn)
    51 {
    52     if(xtree[rn].l==le&&xtree[rn].r==ri)
    53     {
    54         return xtree[rn].sum;
    55     }
    56     int mid=(xtree[rn].l + xtree[rn].r) >> 1;
    57     if(le>mid)
    58     {
    59         return que(le,ri,rn<<1|1);
    60     }
    61     else if(ri<=mid)
    62     {
    63         return que(le,ri,rn<<1);
    64     }
    65     else
    66     {
    67         return  max(que(le,mid,rn<<1),que(mid+1,ri,rn<<1|1));
    68     }
    69 }
    70 int main()
    71 {
    72     int n,m,a,b;
    73     char str[10];
    74     while(~scanf("%d%d%",&n,&m))
    75     {
    76         build(1,n,1);
    77         while(m--)
    78         {
    79    scanf("%s%d%d",str,&a,&b);
    80             if(str[0]=='Q')
    81             {
    82                 printf("%d\n",que(a,b,1));
    83             }
    84             else if(str[0] =='U')
    85             {
    86                 update(a,b,1);
    87             }
    88   }
    89        
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    C# 使用IComparer自定义List类的排序方案
    ubuntu的vim模式
    linux系统目录结构与层级命令使用
    GitHub托管项目
    应用TortoiseGit为github账号添加SSH keys
    PHP中利用PHPMailer配合QQ邮箱实现发邮件
    QQ互联 网站应用接入
    dedecms 中变量函数
    WebSocket 协议
    前端组件库
  • 原文地址:https://www.cnblogs.com/timeship/p/2640769.html
Copyright © 2020-2023  润新知