zoukankan      html  css  js  c++  java
  • 线段树之sum

    线段树之Sum

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 54  Solved: 47
    [Submit][Status][Web Board][Edit] [TestData]

    Description

    给定一数列,规定有两种操作,一是修改某个元素,二是求区间的连续和。 

    Input

    输入数据第一行包含两个正整数n,m(n<=100000,m<=500000),以下是m行, 
    每行有三个正整数k,a,b(k=0或1, a,b<=n).
    k=0时表示将a处数字加上b,k=1时表示询问区间[a,b]内所有数的和。

    Output

    对于每个询问输出对应的答案。

    Sample Input

    10 20
    0 1 10
    1 1 4
    0 6 6
    1 4 10
    1 8 9
    1 4 9
    0 10 2
    1 1 8
    0 2 10
    1 3 9
    0 7 8
    0 3 10
    0 1 1
    1 3 8
    1 6 9
    0 5 5
    1 1 8
    0 4 2
    1 2 8
    0 1 1

    Sample Output

    10
    6
    0
    6
    16
    6
    24
    14
    50
    41

    HINT

     最简单的线段树
     1 #include<cstdio>
     2 using namespace std;
     3 int ans;
     4 struct segment_tree{
     5     int tree[400001]; 
     6     void Update(int num,int l,int r,int a,int b)
     7     {
     8         if(l==r)
     9         {
    10             tree[num]+=b;
    11             return;
    12         }
    13         int mid=(l+r)/2;
    14         if(a<=mid)
    15             Update(num*2,l,mid,a,b);
    16         if(a>mid)
    17             Update(num*2+1,mid+1,r,a,b);
    18         tree[num]=tree[num*2]+tree[num*2+1];
    19     }
    20     void Query(int num,int l,int r,int a,int b)
    21     {
    22         if(l==r)
    23         {
    24             ans+=tree[num];
    25             return;
    26         }
    27         if(l>=a && r<=b)
    28         {
    29             ans+=tree[num];
    30             return;
    31         }
    32         int mid=(l+r)/2;
    33         if(a<=mid)
    34             Query(num*2,l,mid,a,b);
    35         if(b>mid)
    36             Query(num*2+1,mid+1,r,a,b);
    37         return;
    38     }
    39 }S;
    40 int main()
    41 {
    42     int n,m,k,a,b;
    43     scanf("%d%d",&n,&m); 
    44     for(int i=1;i<=m;i++)
    45     {
    46         scanf("%d%d%d",&k,&a,&b);
    47         if(k==0)
    48             S.Update(1,1,n,a,b);
    49         else
    50         {
    51             ans=0;
    52             S.Query(1,1,n,a,b);
    53             printf("%d
    ",ans);
    54         }
    55     }
    56     return 0;
    57 }
    sum
  • 相关阅读:
    彩食鲜架构团队风采
    钉钉的sonar集成通知
    django学习,session与cookie
    flask框架
    logging日志从开始到放弃
    你这么年轻,总得做些什么吧(致那些还未定型的程序员)
    悲观锁,乐观锁
    商城中的猜你喜欢是怎么实现的
    MemCache与redis
    如何使用go打出hell word
  • 原文地址:https://www.cnblogs.com/LHR-HY/p/8047649.html
Copyright © 2011-2022 走看看