Pagini recente » Cod sursa (job #1846038) | Cod sursa (job #2536034) | Cod sursa (job #71109) | Cod sursa (job #1916913) | Cod sursa (job #1152878)
#include <fstream>
using namespace std;
fstream f("aib.in",ios::in);
fstream g("aib.out",ios::out);
const long nmax=100005;
long n,m,cod,i,x,y;
unsigned long a[nmax];
void modifica(int ind,int val)
{
long poz=0;
while (ind<=n)
{
a[ind]+=val;
while ((ind&(1<<poz))==0) poz++;
ind+=1<<poz;
poz++;
}
}
unsigned long suma(int ind)
{
long poz;
unsigned long s;
poz=0;
s=0;
while (ind>0)
{
s=s+a[ind];
while ((ind&(1<<poz))==0) poz++;
ind-=1<<poz;
poz++;
}
return s;
}
long cauta (long val)
{
int poz=1,i;
while (poz<n)
{
poz=poz<<1;
}
for (i=0;poz;poz=poz>>1)
if (i+poz<=n) if (val>=a[i+poz])
{
val=val-a[i+poz];
i=i+poz;
if (!val) return i;
}
return -1;
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>x;
modifica(i,x);
}
for (i=1;i<=m;i++)
{
f>>cod;
if (cod==0)
{
f>>x>>y;
modifica(x,y);
}
if (cod==1)
{
f>>x>>y;
g<<suma(y)-suma(x-1)<<'\n';
}
if (cod==2)
{
f>>x;
g<<cauta(x)<<'\n';
}
}
f.close();g.close();
return 0;
}