Pagini recente » Cod sursa (job #2793080) | Cod sursa (job #15804) | Cod sursa (job #2804493) | Cod sursa (job #2600997) | Cod sursa (job #1772629)
#include <cstdio>
using namespace std;
int n, k, a[200002];
int main()
{
freopen("buline.in", "r", stdin);
freopen("buline.out", "w", stdout);
scanf("%d", &n);
int Sol = -2000000000, Sum = 0, is = 0, ML = 0;
for(int i = 1; i <= n; ++i){
scanf("%d %d", &a[i], &k);
if(k == 0) a[i] *= (-1);
a[n + i] = a[i];
}
int j = 0, L = 0;
for(int i = 1; i <= n; ++i){
if(Sum <= 0)
{Sum = a[i]; L = 1; j = i;}
else
Sum += a[i] , ++L;
if(Sum > Sol) {Sol = Sum; is = j; ML = L;}
else if(Sum == Sol && is > j) {is = j; ML = L;}
else if(Sum == Sol && is == j && ML > L) ML = L;
}
for(int i = n + 1; i <= 2 * n; ++i){
if(i - n == j) break;
if(Sum <= 0)
{Sum = a[i]; L = 1; j = i;}
else
Sum += a[i] , ++L;
bool ok = 0;
if(j > n) ok = 1, j -= n;
if(Sum > Sol) {Sol = Sum; is = j; ML = L;}
else if(Sum == Sol && is < j) {is = j; ML = L;}
else if(Sum == Sol && is == j && ML > L) ML = L;
if(ok == 1) j += n;
}
if(is > n) is -= n;
printf("%d %d %d", Sol, is, ML);
return 0;
}