Pagini recente » Cod sursa (job #1099714) | Cod sursa (job #2184784) | Cod sursa (job #2385953) | Istoria paginii runda/training_1/clasament | Cod sursa (job #1755435)
#include <fstream>
#include <cstdio>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int n;
int putere(int a)
{if(a==0)return 1;
int r=1;
while((a&r)==0)
{
r<<=1;
}
return r;
}
/*suma de la poz 1 la poz b*/
int suma(int b,int s[])
{
int r=1,a=0;
while(b>0)
{
a+=s[b];
r=putere(b);
b-=r;
}
return a;
}
/*pe pozitia adaugam val b*/
void actualizare(int a, int b,int s[])
{
int poz=a,salt=0;
while(poz<=n)
{
s[poz]+=b;
salt=putere(poz);
poz=salt+poz;
}
}
int v[15001];
int main()
{
int m,aux,a;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a;
actualizare(i,a,v);
}int a1,a2,a3;
for(int i=1;i<=m;i++)
{
cin>>a1>>a2>>a3;
if(a1==1)
{
cout<< suma(a3,v)-suma(a2-1,v)<<'\n';
}
else
{
actualizare(a2,a3,v);
}
}
return 0;
}