Pagini recente » Cod sursa (job #2200784) | Cod sursa (job #3161484) | Cod sursa (job #2860665) | Cod sursa (job #2805808) | Cod sursa (job #875233)
Cod sursa(job #875233)
#include<cstdio>
#include<vector>
#include<queue>
#define N 100001
long long v[N];
int n,m;
#define maxp 1<<20
long long suma(int a, int b)
{
return v[b]-v[a-1];
}
int gaseste(long val)
{
long pas=maxp,i;
int temp;
for(i=n;pas>0;pas>>=1)
{
temp = i-pas;
if(temp>0 && v[temp]>=val)
i-=pas;
}
if(v[i]==val) return i;
return -1;
}
void adauga(int poz,int val)
{
while(poz<=n)
v[poz++]+=val;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
short int x;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%hd",&x), adauga(i,x);
//for(int i=1;i<=n;++i) printf("%lld ",v[i]);
int a,b;
while(m--)
{
scanf("%d",&a);
if(a==2)
{
scanf("%d",&b);
printf("%d\n",gaseste(b));
}
else if(a==1)
{
scanf("%d %d",&a,&b);
printf("%lld \n",suma(a,b));
}
else
{
scanf("%d %d",&a,&b);
adauga(a,b);
}
}
return 0;
}