Pagini recente » Cod sursa (job #1052927) | Cod sursa (job #2654974) | Cod sursa (job #1817007) | Cod sursa (job #514819) | Cod sursa (job #2222555)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int NMAX = 1e5+5;
int fn[NMAX],n;
void add(int val, int k)
{
while (k<=n)
{
fn[k]+=val;
k+=k&-k;
}
}
int sum(int k)
{
int s = 0;
while (k>0)
{
s+=fn[k];
k-=k&-k;
}
return s;
}
int query(int val)
{
int step;
for (step = 1; step<n; step <<=1);
for (int i = 0; step>0; step>>=1)
{
if (i+step<=n)
{
if (fn[i+step]<=val)
{
i+=step;
val-=fn[i];
}
if (!val && i)
return i;
}
}
return -1;
}
int main()
{
int m;
in >> n >> m;
for (int i = 1; i<=n; i++)
{
int x;
in >> x;
add(x,i);
}
for (int i = 1; i<=m; i++)
{
int t;
in >> t;
if (t == 0)
{
int k,val;
in >> k >> val;
add(val,k);
}
else if (t == 1)
{
int st,dr;
in >> st >> dr;
out << sum(dr)-sum(st-1) << "\n";
}
else
{
int val;
in >> val;
out << query(val) << "\n";
}
}
}