Cod sursa(job #2254945)

Utilizator bogdi1bogdan bancuta bogdi1 Data 6 octombrie 2018 11:25:24
Problema Cuburi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

using namespace std;
long long sp[250005];
long long stt[250005];
long long drr[250005];
int main()
{   freopen("cuburi2.in", "r",stdin);
    freopen("cuburi2.out", "w",stdout);
    int n,m,i,x,y,st,dr,last,med;
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%d", &x);
        sp[i]=sp[i-1]+x;
        stt[i]=stt[i-1]+sp[i];
    }
    for(i=n; i>=1; i--)
        drr[i]=drr[i+1]+sp[n]-sp[i-1];
    for(i=1; i<=m; i++){
        scanf("%d%d", &st, &dr);
        x=st,y=dr,last=x;
        while(st<=dr){
            med=(st+dr)/2;
            if(sp[med-1]-sp[x-1]<sp[y]-sp[med-1]){
                last=med;
                st=med+1;
            }
            else
                dr=med-1;
        }
        printf("%d %lld\n", last, stt[last-1]-stt[x-1]-sp[x-1]*(last-x)+drr[last+1]-drr[y+1]-(sp[n]-sp[y])*(y-last));
    }
    return 0;
}