Cod sursa(job #3292926)

Utilizator EZY_PETRU124Petru Jurcut EZY_PETRU124 Data 9 aprilie 2025 19:26:42
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

#define NMAX 100002
#define SQMAX 1002

using namespace std;

ifstream cin("datorii.in");
ofstream cout("datorii.out");

int A[NMAX];
int sumb[SQMAX];
int BLOCK_SIZE;

void update(int poz, int val) {
    int blockNumber = poz / BLOCK_SIZE;
    sumb[blockNumber] += val- A[poz];
    A[poz] = val;
}

int query(int st, int dr) {
    int sum = 0;
    while (st <=dr && st%BLOCK_SIZE != 0)
        sum += A[st++];
    while (st + BLOCK_SIZE- 1 <= dr) {
        sum += sumb[st /BLOCK_SIZE];
        st += BLOCK_SIZE;
    }
    while (st <= dr)
        sum += A[st++];
    return sum;
}

int main (){
    int i, st, dr, val, poz, nr, n;
    int ch;
    cin>>n >> nr;
    for (i=0; i<n; i++)
        cin>>A[i];
    BLOCK_SIZE=(int) sqrt(n);
    int nrb=-1;
    for (i=0; i<n; i++) {
        if (i%BLOCK_SIZE==0)
            nrb++;
        sumb[nrb]+=A[i];
    }
    for (i=0; i<nr; i++) {
        cin>>ch;
        if (ch== 0) {
            cin>>poz>>val;
            poz--;
            update(poz,val);
        }
        else {
            cin>>st>>dr;
            st--;
            dr--;
            cout<<query(st,dr)<<'\n';
        }
    }
    return 0;
}