Pagini recente » Cod sursa (job #74445) | Cod sursa (job #278424) | Cod sursa (job #2026015) | Cod sursa (job #1578249) | Cod sursa (job #13370)
Cod sursa(job #13370)
#include <stdio.h>
#define MaxN 100100
#define Lim 50
int n, m;
int a[MaxN];
long long sum[MaxN];
void query(int st, int fn)
{
int i, j, best=a[st];
int scad=0;
long long s=0;
int last=st+Lim;
if (last>fn) last=fn;
for (i=st; i<last; i++){
s+=a[i];
if (s-scad>best) best=s-scad;
if (s<scad) s=scad;
}
int prim=fn-Lim;
if (last>prim) prim=last;
if (prim>last) s+=sum[prim-1]-sum[last-1];
for (i=prim; i<fn; i++){
s+=a[i];
if (s-scad>best) best=s-scad;
}
printf("%d\n", best);
}
int main()
{
freopen("sequencequery.in", "r", stdin);
freopen("sequencequery.out", "w", stdout);
scanf("%d %d", &n, &m);
int i,j,k;
for (i=0; i<n; i++) scanf("%d", a+i);
sum[0]=a[0];
for (i=1; i<n; i++) sum[i]=sum[i-1]+a[i];
for (i=0; i<m; i++){
scanf("%d %d", &j, &k);
query(j-1, k);
}
return 0;
}