Pagini recente » Statistici Hurjui Alexandru-Mihai (hurjuiAlexandru12) | Cod sursa (job #1284944) | simulare_lot_seniori_1 | Cod sursa (job #597987) | Cod sursa (job #1101469)
#include <fstream>
#include <cstdlib>
#include <cstdio>
using namespace std;
ofstream g("aib.out");
int x,a,b,aib[100010],n,m,i;
void update(int val, int poz)
{
int c=0;
while(poz<=n)
{
aib[poz]+=val;
while(!(poz&(1<<c)))
c++;
poz+=(1<<c);
c++;
}
}
int inter(int val)
{
int c=0,s=0;
while(val)
{
s+=aib[val];
while(!(val&(1<<c)))
c++;
val-=(1<<c);
c++;
}
return s;
}
int caut(int val)
{
int ok=0,nr=0,j=0,k=0;
for(k=1;k<n;k=k<<1);
while(k)
{
if(j+k<=n&&aib[j+k]<=val)
{
val-=aib[j+k];
j+=k;
if(!val)
return j;
}
k>>=1;
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
update(x,i);
}
for(i=1;i<=m;i++)
{
scanf("%d",&x);
if(x<2)
{
scanf("%d%d",&a,&b);
if(!x)
{
update(b,a);
}
else
{
g<<inter(b)-inter(a-1)<<'\n';
}
}
else
{
scanf("%d",&a);
g<<caut(a)<<'\n';
}
}
return 0;
}