Pagini recente » Cod sursa (job #2964235) | Cod sursa (job #35863) | Cod sursa (job #2185325) | Cod sursa (job #1441745) | Cod sursa (job #2123476)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int aib[Nmax], n, Q;
inline void Update(int poz,int val)
{
while(poz<=n)
{
aib[poz]+=val;
poz+=(poz&(-poz));
}
}
inline int Sum(int poz)
{
int sum=0;
while(poz>=1)
{
sum+=aib[poz];
poz-=(poz&(-poz));
}
return sum;
}
inline int Binary_Search(int x)
{
int st=1,dr=n,mij,poz=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(Sum(mij)==x)
{
poz=mij;
dr=mij-1;
}
else if(Sum(mij)>x)
dr=mij-1;
else st=mij+1;
}
return poz;
}
int main()
{
int x,op,y;
fin>>n>>Q;
for(int i=1;i<=n;i++)
{
fin>>x;
Update(i,x);
}
while(Q--)
{
fin>>op;
if(op==0)
{
fin>>x>>y;
Update(x,y);
}
else if(op==1)
{
fin>>x>>y;
fout<<Sum(y)-Sum(x-1)<<"\n";
}
else
{
fin>>x;
fout<<Binary_Search(x)<<"\n";
}
}
fin.close();
fout.close();
return 0;
}