Cod sursa(job #2421753)

Utilizator Nemo123456nichita Nemo123456 Data 15 mai 2019 22:50:52
Problema Datorii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int a[300001],aa,bb,pos,val;
 
int arata(int nod,int st,int dr)
{
    if(aa<=st && dr<=bb)
      return a[nod];
    int m=(st+dr)/2,m1=0,m2=0;
    if(aa<=m)
       m1=arata(2*nod,st,m);
    if(bb>m)
       m2=arata(2*nod+1,m+1,dr);
    return m1+m2;
}
 
void schimba(int nod,int st,int dr)
{
    if(st==dr) {a[nod]-=val;return;}
    int m=(st+dr)/2;
    if(pos<=m)
        schimba(2*nod,st,m);
    else
            schimba(2*nod+1,m+1,dr);
    a[nod]=a[2*nod]+a[2*nod+1];
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
    int n,m,x;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
      {
         fin>>val;
         val=-val;
         pos=i;
         schimba(1,1,n);
      }
    for(int i=1;i<=m;i++)
    {
       fin>>x;
       if(x==1)
       {
          fin>>aa>>bb;
          fout<<arata(1,1,n)<<'\n';
       }
       else
       {
          fin>>pos>>val;
          schimba(1,1,n);
       }
    }
}