Cod sursa(job #2022750)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 17 septembrie 2017 10:12:26
Problema Cuburi2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

const int LIM = 250001;

long long CM[LIM];
long long sp[LIM], cst[LIM], cdr[LIM];
int v[LIM];

int main()
{
    FILE *fi = fopen("cuburi2.in", "r"), *fo = fopen("cuburi2.out", "w");
    int n, m, poz, x, y, i;
    double poz_brut;
    fscanf(fi, "%d%d", &n, &m);
    long long cost;
    for(i = 1; i <= n; i++){
      fscanf(fi, "%d", &v[i]);
      sp[i] = sp[i - 1] + v[i];
      cst[i] = cst[i - 1] + v[i] * (i - 1);
      CM[i] = CM[i - 1] + v[i] * i;
    }
    for(i = n - 1; i >= 1; i--)
      cdr[i] = cdr[i + 1] + v[i] * (n - i);
    for(m = m; m > 0; m--){
      fscanf(fi, "%d%d", &x, &y);
      poz_brut = (CM[y] - CM[x - 1]) * 1.0;
      poz_brut = poz_brut / (sp[y] - sp[x - 1]);
      poz = poz_brut + 0.5;
      cost = cst[y] - cst[poz] - (sp[y] - sp[poz]) * (poz - 1) + cdr[x] - cdr[poz] - (sp[poz - 1] - sp[x - 1]) * (n - poz);
      fprintf(fo, "%d %lld\n", poz, cost);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}