Cod sursa(job #2761662)

Utilizator VladCaloVlad Calomfirescu VladCalo Data 3 iulie 2021 11:51:41
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>

using namespace std;
 
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
int aib[15005];

void update(int poz,int x) // actualizam suma restanta in aib
{
    for(int i=poz;i<=n; i+=i&(-i)) //i+=i&(-i) la aib se merge din prin put are lui 2
        aib[i]+=x;
}
int qry(int poz) // adunam sumele restante de la poz data pana la inceput
{
    int s=0;
    for(int i=poz; i>0; i-=i&(-i))
        s+=aib[i];
    return s;
} // functia qry este folosita pt a interoga mai jos 
int main()
{
    int stg,dr,x,y,op;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        update(i,x); // punem restantele din fiecare zi
 
    }
    for(int i=1;i<=m;i++)
    {
        fin>>op;
        if(op==0) // s a achitat 
        {
            fin>>x>>y;
            update(x,-y); // actualizam restantele cand sunt platite
 
        }
        if(op==1) // interogare restante
        {
            fin>>stg>>dr;
            fout<<qry(dr)-qry(stg-1)<<'\n';  // stg-1 ca sa includem si poz stg cand scadem exteriorul 
            //intervalului [stg,dr] 
        }
    }
 
 return 0;
 
}