← Back to List

2268번: 수들의 합 7 ↗

Solutions

C++14
895 B | 895 chars
#include <iostream>
using namespace std;
typedef long long ll;
ll N,M,sq;
ll ar[1100000];
ll mo[1100000];
ll a,b,c;

ll mo_sum(ll a, ll b) {
    ll ret = 0; 
    int S = a/sq;
    int E = b/sq;
    for(ll x=S; x<=E; x++) ret += mo[x];
    for(ll x=sq*S; x<a; x++) ret -= ar[x];
    for(ll x=b+1; x<(E+1)*sq; x++) ret -= ar[x];
    return ret;
}


int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >>M;
    for(sq=1; sq*sq<=N; sq++) mo[sq] = 0;
    for(int x=0; x<N; x++) ar[x] = 0;

    for(int m=0; m < M; m++) {
        cin >> a >> b >> c;
        if(a==0) {
            if(b>c) {
                ll z = b;
                b = c;
                c = z;
            }
            cout << mo_sum(b-1,c-1) << "\n";
        }
        else {
            b--;
            ll change = c-ar[b];
            mo[b/sq] +=change;
            ar[b] +=change;
        }
        
    }
}