Pagini recente » Istoria paginii runda/runda_de_verificare | Istoria paginii runda/bhggggggggg65423.-6/clasament | Cod sursa (job #869194) | Cod sursa (job #2761727) | Cod sursa (job #2761662)
#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;
}