Pagini recente » Cod sursa (job #3184022) | Cod sursa (job #2259608) | Cod sursa (job #2930059) | Cod sursa (job #2725443) | Cod sursa (job #3165306)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int v[400010], n, x;
int sumfinal;
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> v[i] >> x;
v[i] = (v[i] + 2 * x * v[i] - 2 * v[i]);
sumfinal += v[i];
v[n + i] = v[i];
}
int suma = 0, sumamax = 0;
int salvare = 1, primul, lungime = 0, salvarelungime = 0;
for (int i = 1; i <= n; i++)
{
if (suma > 0)
{
suma = v[i];
salvare = i;
salvarelungime = 1;
}
else
suma += v[i], salvarelungime++;
if (suma < sumamax)
{
primul = salvare;
sumamax = suma;
lungime = salvarelungime;
}
}
int suma1 = 0, sumamax1 = 0;
int salvare1, primul1, salvarelungime1, lungime1;
for (int i = 1; i <= 2 * n; i++)
{
if (suma1 + v[i] >= v[i] && salvarelungime1 <= n - 1)
{
suma1 += v[i];
salvarelungime1++;
}
else
suma1 = v[i], salvare1 = i, salvarelungime1 = 1;
if (suma1 > sumamax1)
{
primul1 = salvare1;
sumamax1 = suma1;
lungime1 = salvarelungime1;
}
}
if (sumamax1 > sumfinal-sumamax)
fout << sumamax1 << " " << primul1 << " " << lungime1;
else
{
if (primul + lungime - 1 == n)
primul = 1;
else
primul += lungime;
fout << sumfinal - sumamax << " " << primul << " " << n - lungime;
}
}