Pagini recente » Cod sursa (job #330843) | Cod sursa (job #1698085) | Cod sursa (job #1869856) | Cod sursa (job #308046) | Cod sursa (job #2022609)
#include <bits/stdc++.h>
using namespace std;
const int LIM = 250001;
double CM[LIM];
long long sp[LIM], cst[LIM], cdr[LIM];
int v[LIM];
int aprox(double x){
int rez = x;
x = x - rez;
if(x >= 0.5 )
rez++;
return rez;
}
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 sus, jos, cost;
sus = jos = 0;
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);
sus += v[i] * i;
jos += v[i];
CM[i] = (double) sus / jos;
}
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] * sp[y] - sp[x - 1] * CM[x - 1]) / (sp[y] - sp[x - 1]);
poz = aprox(poz_brut);
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;
}