Pagini recente » Cod sursa (job #3030063) | Cod sursa (job #675821) | Cod sursa (job #1956850) | Cod sursa (job #2048159) | Cod sursa (job #2503758)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, aib[100005], tip, a, b, x;
void add_aib(int ind, int val)
{
while (ind<=n)
{
aib[ind]+=val;
ind=ind+(ind&(-ind));
}
}
int calc_sum(int st, int dr)
{
int s2=0, s1=0;
while (dr)
{
s2+=aib[dr];
dr=dr-(dr&(-dr));
}
st--;
while (st)
{
s1+=aib[st];
st=st-(st&(-st));
}
return s2-s1;
}
void calc3(int k)
{
int putere=1;
while(putere<n)
putere<<=1;
for (int i=0; putere; putere>>=1)
{
if (i+putere<=n)
{
if (k>=aib[i+putere])
{
i+=putere;
k-=aib[i];
if (k==0)
{
g << i << '\n';
return;
}
}
}
}
g << -1 << '\n';
}
int main( )
{
f >> n >> m;
for (int i=1; i<=n; ++i)
{
f >> x;
add_aib(i,x);
}
for (int i=1; i<=m; ++i)
{
f >> tip;
if (tip==0)
{
f >> a >> b;
add_aib(a,b);
}
else if (tip==1)
{
f >> a >> b;
g << calc_sum(a,b) << '\n';
}
else
{
f >> a;
calc3(a);
}
}
return 0;
}