Pagini recente » Cod sursa (job #1869145) | Cod sursa (job #960244) | Cod sursa (job #1005614) | Cod sursa (job #1118642) | Cod sursa (job #786509)
Cod sursa(job #786509)
#include <cstdio>
#include <cmath>
#include <iostream>
#define indice(i) ((i-1)/radn+1)
using namespace std;
int A[100005];
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;
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)
{
// cout<<"ia :"<<indice(a)<<" ib "<<indice(b)<<endl;
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];
//cout<<" S ff "<<S<<endl;
//cout<<" ind : "<<ind<<endl;
int j;
for(j=(ind-1)*radn+1;S<=a;j++)
S+=A[j];
//cout<<" S : "<<S<<" A : "<<A[j]<<endl;
if((S-A[j-1])!=a)
printf("-1\n");
else
printf("%d\n",j-2);
}
}
return 0;
}