Pagini recente » Cod sursa (job #279677) | Cod sursa (job #1174481) | Cod sursa (job #1428206) | Cod sursa (job #490704) | Cod sursa (job #3256431)
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,x,aib[NMAX];
void update(int nod, int val)
{
for(int i=nod; i<=N; i+=(i&(-i)))
{
aib[i]+=val;
}
}
long long query(int nod)
{
long long s=0;
for(int i=nod; i>0; i-=(i&(-i)))
{
s+=aib[i];
}
return s;
}
int cautare(int sum)
{
int poz,p1,p2,pmijl;
long long s;
poz=-1;
p1=1;
p2=N;
while(p1<=p2)
{
pmijl=(p1+p2)/2;
s=query(pmijl);
if(s==sum)
{
poz=pmijl;
p2=pmijl-1;
}
else
{
if(s>sum)
{
p2=pmijl-1;
}
else
{
p1=pmijl+1;
}
}
}
return poz;
}
void citire()
{
fin>>N>>M;
for(int i=1; i<=N; i++)
{
fin>>x;
update(i,x);
}
}
int main()
{
int op,a,b;
citire();
for(int i=1; i<=M; i++)
{
fin>>op;
if(op==0)
{
fin>>a>>b;
update(a,b);
}
if(op==1)
{
fin>>a>>b;
fout << query(b)-query(a-1) << "\n";
}
if(op==2)
{
fin>>a;
fout<< cautare(a) << "\n";
}
}
return 0;
}