Pagini recente » Cod sursa (job #1556482) | Cod sursa (job #2719132) | Istoria paginii runda/vvvvvv/clasament | Cod sursa (job #3135673) | Cod sursa (job #786542)
Cod sursa(job #786542)
#include <cstdio>
#include <cmath>
#include <iostream>
#define indice(i) ((i-1)/radn+1)
using namespace std;
int A[100014];
int batog[350];
int main()
{
int n,m;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
int radn=(int)sqrt(double(n));
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
batog[indice(i)]+=A[i];
}
batog[indice(n)+1]=1;
A[n+1]=1;
A[indice(n)*radn+1]=1;
for(int i=1;i<=m;i++)
{
//cout<<i<<" ";
int op,a,b;
long long S=0;
scanf("%d",&op);
if(op!=2)
{
scanf("%d %d",&a,&b);
if(op==0)
{
batog[indice(a)]+=b;
A[a]+=b;
}
if(op==1)
{
for(int j=indice(a)+1;j<=indice(b)-1;j++)
S+=batog[j];
if(indice(a)==indice(b))
for(int j=a;j<=b;j++)
S+=A[j];
else
{
// cout<<" a : "<<a<<" chestie : "<<indice(a)*radn<<endl;
for(int j=a;j<=indice(a)*radn;j++)
S+=A[j];
//cout<<" b : "<<b<<" chestie : "<<(indice(b)-1)*radn+1<<endl;
for(int j=b;j>=(indice(b)-1)*radn+1;j--)
S+=A[j];
}
printf("%lld\n",S);
}
}
else
{
int S=0;
scanf("%d",&a);
int ind=0;
while(S<a)
S+=batog[++ind];
S-=batog[ind];
int j;
for(j=(ind-1)*radn+1;S<=a;j++)
S+=A[j];
if((S-A[j-1])!=a)
printf("-1\n");
else
{
if(j==-3)
printf("-1\n");
else
printf("%d\n",j-2);
}
}
}
return 0;
}