메뉴 건너뛰기

Programing

BAEKJOON

2042

관리자 2020.04.11 09:15 조회 수 : 45

C++

#include <cstdio>

 

using namespace std;

int N,M,K,bN=1;

long long tree[1000010*3];

void build(){

    for(int idx=(bN+N-1)>>1;idx>0;idx--){

        tree[idx]=tree[idx<<1]+tree[(idx<<1)|1];

    }

}

void update(int idx,long long val){

    for(tree[idx+=bN]=val;idx>1;idx>>=1)

        tree[idx>>1]=tree[idx]+tree[idx^1];

}

long long sum(int l,int r){

    long long res=0;

    for(l+=bN,r+=bN;l<=r;l>>=1,r>>=1){

        if(l & 1)

            res+=tree[l++];

        if(!(r & 1))

            res+=tree[r--];

    }

    return res;

}

int main()

{

    scanf("%d %d %d",&N,&M,&K);

    for(bN =1;bN<N;bN<<=1);

    for(int i=0;i<N;i++){

        scanf("%lld",tree+bN+i+1);

    }

    build();

    for(int i=0;i<M+K;i++){

        int a,b;

        long long c;

        scanf("%d %d %lld",&a,&b,&c);

        if(a-1)

            printf("%lld\n",sum(b,c));

        else

            update(b,c);

 

    }

    return 0;

}

 
번호 제목 글쓴이 날짜 조회 수
공지 안내사항 관리자 2019.12.21 163
45 2468 관리자 2019.12.21 8
44 2458 관리자 2020.04.11 44
43 2457 관리자 2020.04.11 47
42 2454 관리자 2020.04.11 43
41 2450 관리자 2020.04.11 40
40 2339 관리자 2020.04.11 41
39 2307 관리자 2019.12.21 8
38 2250 관리자 2019.12.21 8
37 2233 관리자 2019.12.21 6
36 2170 관리자 2019.12.21 7
35 2132 관리자 2019.12.21 7
34 2096 관리자 2019.12.21 8
» 2042 관리자 2020.04.11 45
32 2003 관리자 2020.04.11 39
31 1991 관리자 2019.12.21 8
30 1967 관리자 2019.12.21 6
29 1966 관리자 2020.04.11 45
28 1946 관리자 2020.04.11 39
27 1874 관리자 2020.04.11 43
26 1839 관리자 2020.04.11 44
25 17611 관리자 2019.12.21 7
24 1753 관리자 2019.12.21 8
23 1742 관리자 2020.04.11 6
22 1720 관리자 2020.04.11 6
21 16210 관리자 2020.04.11 57
20 16201 관리자 2020.04.11 44
19 15971 관리자 2019.12.21 6
18 14865 관리자 2019.12.21 8
17 14503 관리자 2019.12.21 7
16 14502 관리자 2019.12.21 6
위로