Pagini recente » Cod sursa (job #116426) | Cod sursa (job #2779145) | Cod sursa (job #2801752) | Cod sursa (job #1286747) | Cod sursa (job #1008246)
#include <fstream>
#define NMax 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,X[NMax],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++)
{
fin>>X[i];
Update(i,X[i]);
}
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;
}