Pagini recente » Cod sursa (job #173102) | Clasament simularea-care-a-spart-globul-pamantesc | Cod sursa (job #1671956) | Borderou de evaluare (job #231036) | Cod sursa (job #2097394)
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,V[100003];
void Sum(int Poz,int Add)
{
int K;
for(int i=Poz; i<=N; i=i+K)
{
V[i]+=Add;
K=(i&(-i));
}
}
int DetSum(int Poz)
{
int S=0,K;
for(int i=Poz; i>=1; i=i-K)
{
S=S+V[i];
K=(i&(-i));
}
return S;
}
int CautSum(int S)
{
int Left=1,Right=N,Mid;
while(Left<=Right)
{
Mid=(Left+Right)/2;
int K=DetSum(Mid);
if(K==S)
return Mid;
if(K>S)
Right=Mid-1;
else
Left=Mid+1;
}
return -1;
}
int main()
{
fin>>N>>M;
for(int i=1; i<=N; i++)
{
int X;
fin>>X;
Sum(i,X);
}
for(int i=1; i<=M; i++)
{
int X;
fin>>X;
if(X==0)
{
int Y,Z;
fin>>Y>>Z;
Sum(Y,Z);
}
else if(X==1)
{
int Y,Z;
fin>>Y>>Z;
fout<<DetSum(Z)-DetSum(Y-1)<<'\n';
}
else
{
int Y;
fin>>Y;
fout<<CautSum(Y)<<'\n';
}
}
}