Pagini recente » Cod sursa (job #2962173) | Cod sursa (job #2692763) | Cod sursa (job #850464) | Cod sursa (job #2546485) | Cod sursa (job #1748903)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int s[100001], v1[100],m,n;
int putere(int a)
{if(a==0)return 1;
int r=1;
while((a&r)==0)
{
r<<=1;
}
return r;
}
int suma(int b)
{
int r=1,a=0;
while(b>0)
{
a+=s[b];
r=putere(b);
b-=r;
}
return a;
}
void actualizare(int a, int b)
{
int poz=a,salt=0;
while(poz<=n)
{
s[poz]+=b;
salt=putere(poz);
poz=salt+poz;
}
}
void afis(int v[],int n)
{for(int i=1;i<=n;i++)
cout<<v[i]<<" ";
}
int main()
{
int a;
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>a;
actualizare(i,a);
}
int x,y,z;
for(int i=1; i<=m; i++)
{
cin>>x;
if(x==0)
{
cin>>y>>z;
actualizare(y,z);
}
if(x==1)
{
cin>>y>>z;
cout<<suma(z)-suma(y-1)<<'\n';
}
if(x==2)
{
cin>>y;
int k=1;
while(suma(k)<y)
{
k++;
}
if(suma(k)==y)
cout<<k<<'\n';
else
cout<<"-1\n";
}
}
return 0;
}