Pagini recente » Cod sursa (job #1885222) | Cod sursa (job #877075) | Cod sursa (job #721827) | Cod sursa (job #2420133) | Cod sursa (job #2494)
Cod sursa(job #2494)
#include<stdio.h>
#define fin "sequencequery.in"
#define fout "sequencequery.out"
#define NMAX 100001
#define SMAX 1000001
long n,m,min,val,a,b,v[NMAX],segm[SMAX];
FILE *in,*out;
void insert(long nod,long st,long dr) {
long m;
if (st==a && dr==a) segm[nod]=val;
else {
m=(st+dr)/2;
if (a<=m) insert(2*nod,st,m);
else insert(2*nod+1,m+1,dr);
if (segm[2*nod]<segm[2*nod+1]) segm[nod]=segm[2*nod];
else segm[nod]=segm[2*nod+1];
}
}
void query(long nod,long st,long dr) {
long m;
if (a<=st && dr<=b) {
if (min>segm[nod]) min=segm[nod];
}
else {
m=(st+dr)/2;
if (a<=m) query(2*nod,st,m);
if (b>m) query(2*nod+1,m+1,dr);
}
}
int main() {
long i,j,tmp;
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%ld%ld",&n,&m);
for (i=1;i<SMAX;i++) segm[i]=NMAX;
for (i=1;i<=n;i++) {
fscanf(in,"%ld",&v[i]);
v[i]+=v[i-1];
val=v[i]; a=i;
insert(1,1,n);
}
for (i=1;i<=m;i++) {
fscanf(in,"%ld%ld",&a,&b);
b--; //am grija sa evit cazul in care min este v[b]
min=NMAX;
query(1,1,n);
tmp=v[b]-min;
fprintf(out,"%ld\n",tmp);
}
fclose(in); fclose(out);
return 0;
}