Cod sursa(job #2912984)

Utilizator mihneazzzMacovei Daniel mihneazzz Data 11 iulie 2022 23:22:22
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define N 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
long long a[N],b[(int)sqrt(N)],lazy[(int)sqrt(N)],lg;
long long S;
int q,l,r,op;
void Update(int l,int r,long long x)
{
    for(int i=l;i<=r;)
        if(i%lg==1 && i+lg-1<=r) b[(i-1)/lg+1]+=lg*x,lazy[(i-1)/lg+1]+=x,i+=lg;
        else b[(i-1)/lg+1]+=x,a[i]+=x,i++;
    ///for(int i=1;i<=lg+1;i++) cout<<b[i]<<" ";cout<<"\n";
   // c[l]+=x;c[r+1]-=x;
}
long long Query(int l,int r)
{
        S=0;
        for(int i=l;i<=r;)
            if(i%lg==1 && i+lg-1<=r) S+=b[(i-1)/lg+1],i+=lg;
            else S+=a[i++];
    return S;
}

int main()
{
    int i,x,y;
    bool op;
    fin>>n>>m;
    for(i=1;i<=n;i++) fin>>a[i];
    lg=sqrt(n);
    for(i=1;i<=n;i++)
        b[(i-1)/lg+1]+=a[i];
    while(m--)
    {
        fin>>op>>x>>y;
        if(!op) Update(x,x,-y);
        else fout<<Query(x,y)<<"\n";
    }
    return 0;
}