Pagini recente » Cod sursa (job #1958686) | Cod sursa (job #2989897) | Cod sursa (job #860253) | Cod sursa (job #2463527) | Cod sursa (job #254461)
Cod sursa(job #254461)
// using hibride:)
#include <algorithm>
#include <stdio.h>
#define ll long long
#define MAX 250010
using namespace std;
int n, m;
int vctNr[MAX];
ll sumaDistSpate[6000], sumaDistFata[6000];
int main()
{
freopen("cuburi2.in", "r", stdin);
freopen("cuburi2.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d", &vctNr[i]);
if (n <= 5000 && m <= 5000)
{
for (; m; m--)
{
ll sumaMinGs = 1;
for (int i = 1; i <= 62; i++)
sumaMinGs *= 2;
int start, finish, loc;
scanf("%d %d", &start, &finish);
// din spate
ll nrCuburi = 0;
for (int i = finish; i >= start; i--)
{
sumaDistSpate[i] = sumaDistSpate[i + 1] + nrCuburi;
nrCuburi += vctNr[i];
}
// din fata
nrCuburi = 0;
for (int i = start; i <= finish; i++)
{
sumaDistFata[i] = sumaDistFata[i - 1] + nrCuburi;
nrCuburi += vctNr[i];
}
for (int i = start; i <= finish; i++)
{
if (sumaDistFata[i] + sumaDistSpate[i] <= sumaMinGs)
{
loc = i;
sumaMinGs = sumaDistFata[i] + sumaDistSpate[i];
}
sumaDistFata[i] = sumaDistSpate[i] = 0;
}
printf("%d %lld\n", loc, sumaMinGs);
}
}
else
{
}
fclose(stdin);
fclose(stdout);
return 0;
}