Pagini recente » Cod sursa (job #549155) | Cod sursa (job #681371) | Cod sursa (job #1711875) | Cod sursa (job #957695) | Cod sursa (job #1008247)
#include <fstream>
#define NMax 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,S[NMax];
void Update(int P,int V)
{
for(int i=P;i<=N;i+=i&(-i))
S[i]+=V;
}
int Query(int P)
{
int Sum=0;
for(int i=P;i>0;i-=i&(-i))
Sum+=S[i];
return Sum;
}
int Search(int V)
{
int Step;
for (Step = 1; Step < N; Step <<= 1);
for(int i = 0; Step; Step >>= 1) {
if (i+Step <= N && V >= S[i+Step]) {
i += Step, V -= S[i];
if (!V)
return i;
}
}
return -1;
}
int main()
{
fin>>N>>M;
for(int i=1;i<=N;i++)
{
int X;
fin>>X;
Update(i,X);
}
while(M--)
{
int op,a,b;
fin>>op>>a;
if(op!=2)
fin>>b;
if(op==0)
{
Update(a,b);
}
if(op==1)
{
fout<<Query(b)-Query(a-1)<<"\n";
}
if(op==2)
{
fout<<Search(a)<<"\n";
}
}
return 0;
}