Pagini recente » Cod sursa (job #1856670) | Cod sursa (job #2076201) | Cod sursa (job #261335) | Cod sursa (job #1670184) | Cod sursa (job #2221878)
#import<bits/stdc++.h>
int N,o,t,x,y,B[100001];
void U(int position, int value)
{
for(int index = position; index <= N; index += index & -index)
{
B[index] += value;
}
}
int Q(int position)
{
int sum = 0;
for(int index = position; index; index -= index & -index)
{
sum += B[index];
}
return sum;
}
int S(int sum)
{
int i, step;
step = log2(N);
for(i = 0; step; step >>= 1)
{
if(i + step <= N && sum >= B[i + step])
{
i += step;
sum -= B[i];
if(!sum) return i;
}
}
return -1;
}
int main(){
std::ifstream f("aib.in");
std::ofstream g("aib.out");
f>>N>>o;
for(int i = 1; i <= N; ++i)
{
f>>x;
U(i, x);
}
for(;o--;)
{
f>>t;
switch(t)
{
case 0: f>>x>>y;
U(x, y);
break;
case 1: f>>x>>y;
g<<Q(y)-Q(x-1)<<'\n';
break;
case 2: f>>x;
g<<S(x)<<'\n';
}
}
return 0;
}