Pagini recente » Cod sursa (job #2298009) | Cod sursa (job #3041387) | Cod sursa (job #2868239) | Cod sursa (job #1006415) | Cod sursa (job #2228513)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n, m;
int a[100010];
long long querry( int p )
{
long long sum = 0;
for(int q = p; q >= 1; q -= (q^(q-1)) & q )
sum += a[q];
return sum;
}
void update ( int p, int x)
{
for(int q = p; q<=n; q += (q^(q-1)) & q )
a[q] += x;
}
int main()
{
int x;
cin>>n>>m;
for(int i=1; i<=n; ++i)
{
cin>>x;
update(i, x);
}
int a, b, c, st, dr, mij;
for(int i=1; i<=m; ++i)
{
cin>>c;
if(c == 0)
{
cin>>a>>b;
update(a, b);
}
else if(c == 1)
{
cin>>a>>b;
cout<<querry(b) - querry(a-1)<<'\n';
}
else
{
cin>>a;
st=1; dr=n;
while(st<=dr)
{
mij = (st+dr)/2;
if(querry(mij) >= a)
dr = mij-1;
else
st = mij+1;
}
if(querry(st) == a)
cout<<st<<'\n';
else
cout<<"-1\n";
}
}
return 0;
}