Cod sursa(job #254476)

Utilizator savimSerban Andrei Stan savim Data 7 februarie 2009 12:21:21
Problema Cuburi2 Scor 50
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 0.82 kb
#include <stdio.h>

#define MAX_N 250010

int a[MAX_N];
int i, j, k, n, m, p, q, poz;
long long s1[MAX_N], s2[MAX_N];
long long st, dr, sol;

int main() {

	freopen("cuburi2.in", "r", stdin);
	freopen("cuburi2.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	for (i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	
	for (i = 1; i <= m; i++) {
		scanf("%d %d", &p, &q);
		
		for (j = p - 1; j <= q + 1; j++) {
			s1[j] = s2[j] = 0;
			if (j >= p && j <= q) s1[j] = s1[j - 1] + a[j];
		}
		for (j = q; j >= p; j--) {
			s2[j] = s2[j + 1] + a[j];
			dr = dr + s2[j + 1];
		}
		
		sol = 0; poz = 0; st = 0;
		for (j = p; j <= q; j++) {
			if (sol == 0 || dr + st < sol) {
				sol = dr + st;
				poz = j;
			}
			st = st + s1[j]; 
			dr = dr - s2[j + 1];
		}
		printf("%d %lld\n", poz, sol);
	}
	
	return 0;
}