Pagini recente » Cod sursa (job #343917) | Cod sursa (job #1182872) | Cod sursa (job #2745429) | Cod sursa (job #2745465) | Cod sursa (job #1606380)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ofstream fout("aib.out");
int n,k,aib[nmax];
inline void Update(int p,int x)
{
while(p<=n)
{
aib[p]+=x;
p+=(p&(-p));
}
}
inline int Query(int p)
{
int val=0;
while(p>0)
{
val+=aib[p];
p-=(p&(-p));
}
return val;
}
inline int Bin_Search(int x)
{
int sol=-1,st=1,dr=n,mij,inter;
while(st<=dr)
{
mij=(st+dr)/2;
inter=Query(mij);
if(inter==x)
{
sol=mij;
dr=mij-1;
}
else if(inter>x) dr=mij-1;
else st=mij+1;
}
return sol;
}
inline void Solve1(int x,int y)
{
int sol;
sol=Query(y)-Query(x-1);
fout<<sol<<"\n";
}
inline void Solve2(int x)
{
int val;
val=Bin_Search(x);
fout<<val<<"\n";
}
inline void Input()
{
int i,x,p1,p2;
ifstream fin("aib.in");
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>x;
Update(i,x);
}
for(i=1;i<=k;i++)
{
fin>>x;
switch (x)
{
case 0 :
{
fin>>p1>>p2;
Update(p1,p2);
break;
}
case 1 :
{
fin>>p1>>p2;
Solve1(p1,p2);
break;
}
case 2 :
{
fin>>p1;
Solve2(p1);
break;
}
}
}
fin.close();
fout.close();
}
int main()
{
Input();
return 0;
}