Pagini recente » Cod sursa (job #745133) | Cod sursa (job #893237) | Cod sursa (job #1545762) | Cod sursa (job #2615134) | Cod sursa (job #1161919)
#include <fstream>
#define Nmax 100009
#define LSB(x) (x&(-x))
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N,M,P,AIB[Nmax],val;
inline void Update(int poz,int x)
{
for(int i=poz;i<=N;i+=((-i)&i))
AIB[i]+=x;
}
inline int S(int poz)
{
int aux=0;
for(int i=poz; i>0; i-=((-i)&i))
aux+=AIB[i];
return aux;
}
inline int Search(int val)
{
for(int i=0,pas=P; pas; pas>>=1)
if(i+pas<=N && AIB[i+pas]<=val)
{
i+=pas , val-=AIB[i];
if(!val)return i;
}
return -1;
}
int main()
{
f>>N>>M;
for(P=1; P<N; P<<=1);
for(int i=1;i<=N;++i)
f>>val , Update(i,val);
for(int i=1;i<=M;++i)
{
int op,a,b,val,poz;
f>>op;
if(!op) f>>poz>>val , Update(poz,val);
if(op==1) f>>a>>b, g<<S(b)-S(a-1)<<'\n';
if(op==2) f>>val , g<<Search(val)<<'\n';
}
f.close();g.close();
return 0;
}