Pagini recente » Monitorul de evaluare | Cod sursa (job #3327640) | Cod sursa (job #1672893) | Cod sursa (job #3338745) | Cod sursa (job #3344890)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int main()
{
int N;
fin >> N;
int a[200001];
for(int i = 1; i <= N; i++)
{
int x, c;
fin >> x >> c;
if(c == 1) a[i] = x;
else a[i] = -x;
}
int sum = 0, bestSum = -2000000000;
int start = 1, bestStart = 1, bestEnd = 1;
for(int i = 1; i <= N; i++)
{
sum += a[i];
if(sum > bestSum)
{
bestSum = sum;
bestStart = start;
bestEnd = i;
}
if(sum < 0)
{
sum = 0;
start = i + 1;
}
}
int total = 0;
for(int i = 1; i <= N; i++)
total += a[i];
int minSum = 2000000000, cur = 0;
for(int i = 1; i <= N; i++)
{
cur += a[i];
if(cur < minSum)
minSum = cur;
if(cur > 0)
cur = 0;
}
int circular = total - minSum;
if(circular > bestSum)
{
fout << circular << " 1 " << N;
}
else
{
fout << bestSum << " " << bestStart << " " << bestEnd - bestStart + 1;
}
return 0;
}