Pagini recente » Cod sursa (job #2049079) | Cod sursa (job #2011994) | Cod sursa (job #1924166) | Cod sursa (job #1739431) | Cod sursa (job #1466869)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
#define dim 100001
int N,M,T;
int Arb[dim];
int C,S;
void Update(int poz,int val)
{
C=0;
while(poz<=N)
{
Arb[poz]+=val;
while(!(poz&(1<<C)))
C++;
poz+=(1<<C);
C+=1;
}
}
int Query(int poz)
{
C=0,S=0;
while(poz>0)
{
S+=Arb[poz];
while(!(poz&(1<<C)))
C++;
poz-=(1<<C);
C+=1;
}
return S;
}
int Search(int val)
{
int i,step;
for(step=1;step<N;step<<=1);
for(i=0;step;step>>=1)
{
if(i+step<=N)
{
if(val>=Arb[i+step])
{
i+=step,val-=Arb[i];
if(!val)
return i;
}
}
}
return -1;
}
int main()
{
//memset(Arb,0,sizeof(Arb));
int K,X,Y;
f>>N>>M;
for(int i=1;i<=N;i++)
{
f>>T;
Update(i,T);
}
for(;M;M--)
{
f>>K;
if(K<2)
{
f>>X>>Y;
if(!K)
Update(X,Y);
else
g<<Query(Y)-Query(X-1)<<"\n";
}
else
{
f>>X;
g<<Search(X)<<"\n";
}
}
}