Pagini recente » Cod sursa (job #1048925) | Cod sursa (job #1648993) | Cod sursa (job #473789) | Cod sursa (job #1346404) | Cod sursa (job #2022747)
#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 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 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 = (double) (CM[y] - 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;
}