Cod sursa(job #1432558)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 9 mai 2015 12:22:38
Problema Cuburi2 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#define INF ((1LL<<63)-1)
#define DIM 256000
using namespace std;

FILE *fin = fopen("cuburi2.in" ,"r");
FILE *fout= fopen("cuburi2.out","w");

int N, V[DIM], Q, X, Y; long long A[DIM], B[DIM];

void SetUp(){
    fscanf(fin, "%d %d", &N, &Q);
    for(int i = 1; i <= N; i ++){
        fscanf(fin, "%d", &V[i]);
        A[i] = A[i-1] + V[i];
        B[i] = B[i-1] + V[i] * 1LL * i;
    }
    return;
}

inline long long Dist(long long A[], long long B[], int st, int mid, int dr){
    return ((A[mid] - A[st-1]) * 1LL * mid - (B[mid] - B[st-1])) + ((B[dr] - B[mid-1]) - (A[dr] - A[mid-1]) * 1LL * mid);
}

void Query(int X, int Y){
    int P = X, pas;
    for(pas = 1<<17; pas != 0; pas >>= 1){
        if((P + pas <= Y) && (Dist(A, B, X, P + pas - 1, Y) > Dist(A, B, X, P + pas, Y)))
            P += pas;
    }
    fprintf(fout, "%d %lld\n", P, Dist(A, B, X, P, Y));
    return;
}

int main(){
    SetUp();
    while(Q){
        fscanf(fin, "%d %d", &X, &Y);
        Query(X, Y); Q --;
    }
    return 0;
}