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 }

 

你可能感兴趣的:(HDU)