Pagini recente » Cod sursa (job #704910) | Cod sursa (job #1429598) | Cod sursa (job #1205497) | Cod sursa (job #1509001) | Cod sursa (job #786480)
Cod sursa(job #786480)
#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];
}
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
{
for(int j=a;j<=indice(a)*radn;j++)
S+=A[j];
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];
printf("%d\n",j-1);
}
}
return 0;
}