Cod sursa(job #3252323)

Utilizator Ilinca_Radu_2022Radu Ilinca-Rucsandra Ilinca_Radu_2022 Data 29 octombrie 2024 10:37:04
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, i, k, s[125], a[15005], j, x, y, c, stk, stp, drk, drp, ans, lg;
int main()
{
    fin>>n>>m;
    for (i=1; i<=n; i++) fin>>a[i];
    k=int(sqrt(n));
    lg=n/k;
    for (i=1; i<=lg; i++) {
        s[i]=0;
        for (j=1; j<=k; j++) {
            s[i]+=a[(i-1)*k+j];
        }
    }
    for (i=k*lg+1; i<=n; i++) s[k+1]+=a[i];
    if (n%k!=0) lg++;
    for (i=1; i<=m; i++) {
        fin>>c>>x>>y;
        if (c==0) {
            if (x%k==0) s[x/k]-=y;
            else s[x/k+1]-=y;
            a[x]-=y;
        }
        else {
            if (x%k==0){
                stk=x/k;
                stp=k;
            }
            else {
                stk=x/k+1;
                stp=x%k;
            }
            if (y%k==0) {
                drk=y/k;
                drp=k;
            }
            else {
                drk=y/k+1;
                drp=y%k;
            }
            ans=0;
            if (stp!=1) for (j=stp; j<=k; j++) ans+=a[(stk-1)*k+j];
            else ans+=s[stk];
            for (j=stk+1; j<drk; j++) ans+=s[j];
            if (drp!=k) for (j=1; j<=drp; j++) ans+=a[(drk-1)*k+j];
            else ans+=s[drk];
            fout<<ans<<'\n';
        }
    }
    return 0;
}