Pagini recente » Cod sursa (job #2058210) | Cod sursa (job #1775196) | Cod sursa (job #1685263) | Cod sursa (job #2059536) | Cod sursa (job #2105648)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
#define zero(x) ((x^(x-1))&x)
const int nmax=100000;
int n,q,v[nmax+5],aib[nmax+5];
void add(int poz,int value)
{
for(int i=poz;i<=n;i+=zero(i))
aib[i]+=value;
}
int prefix(int poz)
{
int sum=0;
for(int i=poz;i>=1;i-=zero(i))
sum+=aib[i];
return sum;
}
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
add(i,a);
}
for(int i=1;i<=q;i++)
{
int tip,a,b;
cin>>tip;
if(tip==0)
{
cin>>a>>b;
add(a,b);
}
if(tip==1)
{
cin>>a>>b;
cout<<prefix(b)-prefix(a-1)<<"\n";
}
if(tip==2)
{
cin>>a;
int r=0,pas=(1<<16);
while(pas)
{
if(r+pas<=n and prefix(r+pas)<a)
r+=pas;
pas/=2;
}
r++;
if(prefix(r)==a)
cout<<r<<"\n";
else
cout<<"-1\n";
}
}
return 0;
}
/**
**/