Pagini recente » Cod sursa (job #387742) | Cod sursa (job #159047) | Cod sursa (job #1679350) | Cod sursa (job #322376) | Cod sursa (job #1760958)
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,sume[100005];
int aflare(int x, int y)
{
int sum = 0;
while(y > 0)
{
sum += sume[y];
y -= ((y ^ (y - 1)) & y);
}
return sum;
}
void max_interval(int x, int y)
{
printf("%d\n",aflare(1,y) - aflare(1,x - 1));
}
void aduna(int poz, int x)
{
while(poz <= n)
{
sume[poz] += x;
poz += ((poz ^ (poz - 1)) & poz);
}
}
void citire()
{
scanf("%d %d\n",&n,&m);
int tmp;
for(int i = 1 ; i <= n ; ++i)
{
scanf("%d ",&tmp);
aduna(i,tmp);
}
int a,b;
for(int i = 1 ; i <= m ; ++i)
{
scanf("%d ",&tmp);
if(tmp == 0)
{
scanf("%d %d\n",&a,&b);
aduna(a,b);
continue;
}
if(tmp == 1)
{
scanf("%d %d\n",&a,&b);
max_interval(a,b);
continue;
}
if(tmp == 2)
{
scanf("%d\n",&a);
continue;
}
}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
citire();
return 0;
}