Pagini recente » Cod sursa (job #105918) | Cod sursa (job #261546)
Cod sursa(job #261546)
#include<stdio.h>
//int a[100005],
int b[100005];
int n,m;
int stop;
/*void adunare()
{
}*/
void actualizare(int i,int x)
{int j;
for(j=i;j<=n;j++)
b[j]+=x;
}
void suma(int i,int j)
{
printf("%d \n",(b[j]-b[i-1]));
}
void apoz(int k,int i,int j)
{if(stop==0&&i<=j){
if(i==j)
{if(b[i]==k) {printf("%d \n",i);stop=1;}
}
else
{int med=(i+j)/2;
if(b[med]==k) {printf("%d \n",med);stop=1;}
else
if(k<b[med])
{
apoz(k,i,med);
}
else
apoz(k,med+1,j);
}
}
}
void poz(int k)
{int i,ok=0;
for(i=1;i<n;i+=2)
{ if(b[i]==k)
{printf("%d \n",i);ok=1;}
if(b[i]>k)
{if(b[i-1]==k)
{printf("%d \n",i-1);ok=1;}
break;
}
}
if(ok==0&&b[n]==k)
{printf("%d \n",n);ok=1;
}
if(ok==0)
printf("-1 \n");
}
int main()
{int i;
int x,y,z;
freopen("grader_test5.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&x);
// a[1]=x;
b[1]=x;
for(i=2;i<=n;i++)
{scanf("%d",&x);
// a[i]=x;
b[i]+=b[i-1]+x;
}
for(i=0;i<m;i++)
{
scanf("%d",&x);
if(x==0)
{scanf("%d %d",&y,&z);
actualizare(y,z);
}
if(x==1)
{ scanf("%d %d",&y,&z);
suma(y,z);
}
if(x==2)
{scanf("%d",&y);
stop=0;
apoz(y,1,n);
if(stop==0)
printf("-1 \n");
}
}
/* printf("\n");
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
for(i=1;i<=n;i++)
printf("%d ",b[i]);
*/
return 0;
}