Pagini recente » Cod sursa (job #1942534) | Cod sursa (job #2224276) | Cod sursa (job #2385093) | Cod sursa (job #2046785) | Cod sursa (job #3349322)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,q,v[100005],c,x,y,i,aib[100005];
void update (int p, int val)
{
for (int j=p;j<=n;j+=(j&-j))
aib[j]+=val;
}
int queryp (int p)
{
int sum=0;
for (int j=p;j>0;j-=(j&-j))
sum+=aib[j];
return sum;
}
int query (int st, int dr)
{
return queryp(dr)-queryp(st-1);
}
int task3(int a)
{
int st=1, dr=n, mij,rez=-1;
while (st<=dr)
{
mij=st+(dr-st)/2;
int s=queryp(mij);
if (s==a) return mij;
if (s<a) st=mij+1;
else dr=mij-1;
}
return rez;
}
int main()
{
fin>>n>>q;
for (i=1;i<=n;i++) {fin>>v[i]; update(i,v[i]);}
while (q--)
{
fin>>c;
if (c==0)
{
fin>>x>>y;
update(x,y);
}
if (c==1)
{
fin>>x>>y;
fout<<query(x,y)<<'\n';
}
if (c==2)
{
fin>>x;
fout<<task3(x)<<'\n';
}
}
return 0;
}