Pagini recente » Cod sursa (job #920550) | Cod sursa (job #1133769) | Cod sursa (job #1881214) | Cod sursa (job #392338) | Cod sursa (job #2097352)
#include <fstream>
using namespace std;
ifstream F("aib.in");
ofstream G("aib.out");
int n, aib[100005], a, b, x, q;
void upd(int pos, int val)
{
while(pos <= n)
{
aib[pos] += val;
pos += pos & (-pos);
}
}
int query( int pos )
{
int sum = 0;
while(pos > 0)
{
sum += aib[pos];
pos -= pos & (-pos);
}
return sum;
}
int Find( int val )
{
int l = 1, r = n, mid, aux;
while(l <= r)
{
mid = (l+r)>>1;
aux = query(mid);
if( aux == val ) return mid;
if( aux > val ) r = mid-1;
else l = mid+1;
}
return -1;
}
int main()
{
F >> n >> q;
for( int i = 1; i <= n; ++ i ) F >> x, upd(i, x);
while(q--)
{
F >> x;
if(!x) F >> a >> b, upd(a, b);
else if(x == 1) F >> a >> b, G << query(b) - query(a-1) << "\n";
else F >> a, G << Find(a) << "\n";
}
return 0;
}