Pagini recente » Cod sursa (job #2559241) | Cod sursa (job #3180471) | Cod sursa (job #1970904) | Cod sursa (job #1095017) | Cod sursa (job #1416304)
#include <stdio.h>
#include <ctype.h>
#define MAXN 250000
long long a[MAXN+1], b[MAXN+1];
FILE *fin;
inline long long suma(int x, int p, int y){
return b[y]-b[p]+p*(a[p-1]-a[x-1]-a[y]+a[p])-b[p-1]+b[x-1];
}
inline int citeste(){
int x=0;
char ch=fgetc(fin);
while(!isdigit(ch)){
ch=fgetc(fin);
}
while(isdigit(ch)){
x=10*x+ch-'0';
ch=fgetc(fin);
}
return x;
}
int main(){
int n, q, i, x, y, v, p, pas;
FILE *fout;
fin=fopen("cuburi2.in", "r");
fout=fopen("cuburi2.out", "w");
fscanf(fin, "%d%d", &n, &q);
for(i=1; i<=n; i++){
v=citeste();
a[i]=a[i-1]+v;
b[i]=b[i-1]+i*(long long)v;
}
for(i=0; i<q; i++){
x=citeste();
y=citeste();
p=x;
for(pas=1<<17; pas!=0; pas>>=1){
if((p+pas<=y)&&(2*a[p+pas-1]<a[x-1]+a[y])){
p+=pas;
}
}
fprintf(fout, "%d %lld\n", p, suma(x, p, y));
}
fclose(fin);
fclose(fout);
return 0;
}