Cod sursa(job #1267063)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 19 noiembrie 2014 14:45:38
Problema Cuburi2 Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define MAX 250000
long long d[3][MAX];
int main(){
    FILE *fin,*fout;
    fin=fopen("cuburi2.in","r");
    fout=fopen("cuburi2.out","w");
    int n,m;
    fscanf(fin,"%d%d",&n,&m);
    int i;
    for(i=1;i<=n;i++){
        int x;
        fscanf(fin,"%d",&x);
        d[0][i]=d[0][i-1]+x;
        d[1][i]=d[1][i-1]+d[0][i-1];
    }
    for(i=n;i>=1;i--)
        d[2][i]=d[2][i+1]+d[0][n]-d[0][i];
    for(i=1;i<=m;i++){
        int a,b;
        fscanf(fin,"%d%d",&a,&b);
        int pow=1;
        while(pow<b-a)
            pow*=2;
        int ans=a;
        while(pow){
            if(ans+pow<=b&&d[0][ans+pow-1]-d[0][a-1]<d[0][b]-d[0][ans+pow-1])
                ans+=pow;
            pow/=2;
        }
        fprintf(fout,"%d %lld\n",ans,d[1][ans]-d[1][a]-d[0][a-1]*(ans-a)+d[2][ans]-d[2][b]-(b-ans)*(d[0][n]-d[0][b]));
    }
    return 0;
}