메뉴 건너뛰기

Programing

BAEKJOON

10999

관리자 2020.04.11 09:30 조회 수 : 47

C++

#include <cstdio>

 

using namespace std;

const int max_N=1000010;

int N,M,K;

long long arr[max_N],tree[4*max_N],lazy[max_N*4];

long long build(int idx,int s,int e){

    if(s==e){

        return tree[idx]=arr[s];

    }

    int mid=(s+e)/2;

    return tree[idx]=build(idx<<1,s,mid)+build((idx<<1)|1,mid+1,e);

}

void lazy_(int idx,int s,int e){

    if(lazy[idx]!=0){

        tree[idx]+=lazy[idx]*(e-s+1);

        if(s!=e){

            lazy[idx<<1]+=lazy[idx];

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

        }

        lazy[idx]=0;

    }

}

long long update(int idx,int s,int e,int l,int r,long long val){

    lazy_(idx,s,e);

    if(r < s || l > e)

        return tree[idx];

    if(l<=s&&e<=r){

        tree[idx]+=(e-s+1)*val;

        if(s!=e){

            lazy[idx<<1]+=val;

            lazy[(idx<<1)|1]+=val;

        }

        return tree[idx];

    }

    int mid=(s+e)/2;

    return tree[idx]=update(idx<<1,s,mid,l,r,val)+update((idx<<1)|1,mid+1,e,l,r,val);

}

long long sum(int idx,int s,int e,int l,int r){

    if(r < s || l > e)

        return 0;

    lazy_(idx,s,e);

    if(l<=s&&e<=r){

        return tree[idx];

    }

    int mid=(s+e)/2;

    return sum(idx<<1,s,mid,l,r)+sum((idx<<1)|1,mid+1,e,l,r);

}

int main()

{

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

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

        scanf("%lld",&arr[i]);

    }

    build(1,1,N);

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

        int a,b,c;

        long long d;

        scanf("%d",&a);

        if(a==1){

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

            update(1,1,N,b,c,d);

        }else{

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

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

        }

    }

    return 0;

}

 
번호 제목 글쓴이 날짜 조회 수
공지 안내사항 관리자 2019.12.21 164
15 14430 관리자 2019.12.21 6
14 1182 관리자 2019.12.21 8
13 11660 관리자 2020.04.11 46
12 1149 관리자 2019.12.21 8
» 10999 관리자 2020.04.11 47
10 10937 관리자 2020.04.11 41
9 10919 관리자 2020.04.11 42
8 10800 관리자 2019.12.21 8
7 10799 관리자 2019.12.21 9
6 10534 관리자 2020.04.11 44
5 10164 관리자 2019.12.21 6
4 10159 관리자 2019.12.21 6
3 10157 관리자 2019.12.21 8
2 10070 관리자 2020.04.11 44
1 1005 관리자 2019.12.21 8
위로