Pagini recente » Cod sursa (job #3301195) | Cod sursa (job #217254) | Cod sursa (job #3336406) | Cod sursa (job #3173379) | Cod sursa (job #3337612)
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
int a_int[1000000+5];
int num_zile, num_queries;
int valoare;
bool tip_query;
int x, y;
void update(int pozitie, int valoare, int nod = 1, int st = 1, int dr = num_zile){
if(st == dr){
a_int[nod] -= valoare;
return;
}
int mijloc = (st + dr) / 2;
if(pozitie <= mijloc){
update(pozitie, valoare, nod * 2, st, mijloc);
}
else{
update(pozitie, valoare, nod * 2 + 1, mijloc + 1, dr);
}
a_int[nod] = a_int[nod * 2] + a_int[nod * 2 + 1];
}
int query(int st_prim, int dr_prim, int nod = 1, int st = 1, int dr = num_zile){
if(st_prim <= st && dr <= dr_prim){
return a_int[nod];
}
int mijloc = (st + dr) / 2;
int suma = 0;
if(st_prim <= mijloc){
suma += query(st_prim, dr_prim, nod * 2, st, mijloc);
}
if(dr_prim > mijloc){
suma += query(st_prim, dr_prim, nod * 2 + 1, mijloc + 1, dr);
}
return suma;
}
int main(){
fin >> num_zile >> num_queries;
for(int i = 1; i <= num_zile; i++){
fin >> valoare;
update(i, -valoare);
}
for(int i = 1; i <= num_queries; i++){
fin >> tip_query >> x >> y;
if(tip_query == 0){
update(x, y);
}
else if(tip_query == 1){
fout << query(x, y) << '\n';
}
}
return 0;
}