Pagini recente » Cod sursa (job #3146498) | Cod sursa (job #2836154) | Cod sursa (job #3196625) | Cod sursa (job #2317552) | Cod sursa (job #2829296)
#include <bits/stdc++.h>
using namespace std;
int aib[100001];
int s = 0;
int n;
void update(int nod, int val)
{
for( int i = nod; i <= n; i+=(i&(-i)))
{
aib[i] += val;
}
}
int querry( int nod )
{
int s = 0;
for( int i = nod ; i >= 1; i -= (i&(-i)))
{
s += aib[i];
}
return s;
}
int cbin( int val )
{
int ans = 0, pas = 1 << 17;
long long sum = 0;
while ( pas )
{
if (ans + pas <=n and sum + aib[ans + pas] <= val )
{
sum += aib[ans + pas];
ans += pas;
if ( sum == val )
return ans;
}
pas >>= 1;
}
return -1;
}
int main()
{
ifstream cin("aib.in");
ofstream cout("aib.out");
int t;
int x;
cin >> n >> t;
for ( int i = 1; i <= n; i++)
{
cin >> x;
update ( i, x);
}
while ( t--)
{
int q, a, b;
cin >> q >> a;
if ( q != 2)
cin >> b;
if (q == 0)
update( a, b);
if ( q == 1 )
{
cout << querry(b) - querry(a - 1) << '\n';
}
if ( q == 2 )
{
cout << cbin(a) << '\n';
}
}
}