Pagini recente » Cod sursa (job #238003) | Cod sursa (job #1896217) | Cod sursa (job #1119474) | Cod sursa (job #816982) | Cod sursa (job #2874881)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100005], n;
void update(int p, int x)
{
for(int i=p; i<=n; i+=(i&(-i)))
aib[i]+=x;
}
int sum(int p)
{
int ans=0;
for(int i=p; i>=1; i-=(i&(-i)))
ans+=aib[i];
return ans;
}
int sk(int k)
{
int st=1, dr=n, ans=1;
while(st<=dr)
{
int m=(st+dr)/2;
if(sum(m)<=k)
{
st=m+1;
ans=m;
}
else
dr=m-1;
}
if(sum(ans)==k)
return ans;
return -1;
}
int main()
{
int m, c, a, b, x, i;
in>>n>>m;
for(i=1; i<=n; i++)
{
in>>x;
update(i, x);
}
for(i=1; i<=m; i++)
{
in>>c;
if(c==0)
{
in>>a>>b;
update(a, b);
}
else if(c==1)
{
in>>a>>b;
out<<sum(b)-sum(a-1)<<'\n';
}
else if(c==2)
{
in>>a;
out<<sk(a)<<'\n';
}
}
return 0;
}