Pagini recente » Cod sursa (job #1077501) | Cod sursa (job #1298098) | Cod sursa (job #3314567) | Cod sursa (job #3346594) | Cod sursa (job #3322692)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long n, q;
long long d[200005], bit[200005];
void update(long long k, long long u)
{
while(k<=n)
{
bit[k]+=u;
k+=(k&-k);
}
}
long long prefixsum(long long k)
{
long long sum=0;
while(k>0)
{
sum+=bit[k];
k-=(k&-k);
}
return sum;
}
long long range(long long a, long long b)
{
return prefixsum(b)-prefixsum(a-1);
}
int main()
{
fin>>n>>q;
for(int i = 1;i <= n; ++i)
{
fin>>d[i];
update(i, d[i]);
}
for(int i = 1; i <=q ; ++i)
{
int c;
fin>>c;
if(c==0)
{
int a, b;
fin>>a>>b;
update(a, b);
}
else if(c==1)
{
int a, b;
fin>>a>>b;
fout<<range(a,b)<<'\n';
}
else
{
int a;
int k;
fin>>a;
int st=1, dr=n;
while(st<=dr)
{
int mij=st+dr;
mij/=2;
int s=range(1, mij);
if(s==a){k=mij; break;}
else if(s<a)st=mij+1;
else dr=mij-1;
}
fout<<k<<'\n';
}
}
}