Cod sursa(job #1416288)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 7 aprilie 2015 20:34:33
Problema Cuburi2 Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#define MAXN 250000
long long a[MAXN+1], b[MAXN+1];
inline long long suma(int x, int p, int y){
    return b[y]-b[p]-p*(a[y]-a[p])+(p-x+1)*(a[p-1]-a[x-1])-(b[p-1]-b[x-1]-(x-1)*(a[p-1]-a[x-1]));
}
int main(){
    int n, q, i, x, y, v, p, pas;
    FILE *fin, *fout;
    fin=fopen("cuburi2.in", "r");
    fout=fopen("cuburi2.out", "w");
    fscanf(fin, "%d%d", &n, &q);
    for(i=1; i<=n; i++){
        fscanf(fin, "%d", &v);
        a[i]=a[i-1]+v;
        b[i]=b[i-1]+i*(long long)v;
    }
    for(i=0; i<q; i++){
        fscanf(fin, "%d%d", &x, &y);
        p=x;
        for(pas=1<<17; pas!=0; pas>>=1){
            if((p+pas<=y)&&(suma(x, p+pas-1, y)>suma(x, p+pas, y))){
                p+=pas;
            }
        }
        fprintf(fout, "%d %lld\n", p, suma(x, p, y));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}