Pagini recente » Cod sursa (job #413460) | Cod sursa (job #783348) | Cod sursa (job #2104085) | Cod sursa (job #2943987) | Cod sursa (job #759728)
Cod sursa(job #759728)
#include<fstream>
#define nmax 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
long long N, start, finish, v[nmax], poz, val;
//in v[x] retinem suma de la [x - 2^nr, x], unde nr = nr de zerouri al lui x
void add(long poz, long val)
{
int nr = 0 ;
while(poz <= N)
{
v[poz] +=val;
while( (poz &(1<<nr)) == 0) nr++;
poz += (1<<nr); nr++;
}
}
long sum(long x)
{
int nr = 0;
long S = 0;
while(x)
{
S += v[x];
x &= x - 1;
// while((x & (1<<nr)) == 0) nr++;
// x-= (1<<nr);
// nr++;
}
return S;
}
void read()
{
int nr, k;
fin>> N >>nr;
for(int i = 1; i <= N;i++)
fin>> k, add(i, k);
for(int i = 1; i <= nr; i++)
{
int tip;
fin >>tip;
if( tip == 0)
{
fin >> poz>> val;
add(poz, -val);
}
if(tip == 1)
{
fin>>start >> finish;
fout<< sum(finish) - sum(start - 1)<<'\n';
}
}
}
int main()
{
read();
fin.close();
return 0;
}