Pagini recente » Cod sursa (job #1168508) | Cod sursa (job #2865192) | Cod sursa (job #2956212) | Cod sursa (job #2824825) | Cod sursa (job #254294)
Cod sursa(job #254294)
#include <cstdio>
const int N = 250001;
const int M = 250001;
const int INF = 0x3f3f3f3f;
int n,m, x,y;
int a[N];
long long s[N], ss[N];
void precalc() {
s[0] = 0;
ss[0] = 0;
for (int i = 1; i <= n; ++i) {
s[i] = s[i-1] + a[i];
ss[i] = ss[i-1] + s[i];
}
}
long long dreapta ( int x, int y ) {
return s[y]*(y-x+1) - ss[y-1] + ((x > 1) ? ss[x-2] : 0);
}
void solve ( int x, int y ) {
if (x == y) {
printf("%d 0\n",x);
return;
}
long long min, curd = dreapta(x+1,y), curs = 0;
int pmin;
min = curd;
pmin = x;
for (int i = x+1; i <= y; ++i) {
curd -= s[y] - s[i-1];
curs += s[i-1] - s[x-1];
if (min > curd+curs) {
min = curd+curs;
pmin = i;
}
}
printf("%d %d\n",pmin,min);
}
int main() {
freopen("cuburi2.in","rt",stdin);
freopen("cuburi2.out","wt",stdout);
scanf("%d %d",&n,&m);
for (int i = 1; i <= n; ++i) {
scanf("%d",&a[i]);
}
precalc();
for (int i = 0; i < m; ++i) {
scanf("%d %d",&x,&y);
solve(x,y);
}
return 0;
}