Pagini recente » Cod sursa (job #857356) | Cod sursa (job #3174019) | Cod sursa (job #3161276) | Cod sursa (job #2979899) | Cod sursa (job #1050728)
#include <fstream>
using namespace std;
ifstream f("buline.in");
ofstream g("buline.out");
int v[200001],n;
int main()
{
f>>n;
for (int i=1;i<=n;i++) {
int p;
f>>v[i]>>p;
v[i + n] = v[i];
if (p==0)
v[i] = v[i+n] = -v[i];
}
int MaxEndingHere = v[1];
int MaxSum = v[1];
int begin_temp = 0, end = 0, MaxStart = 0;
for (int i = 2; i <= n; i++) {
if (MaxEndingHere > 0) {
MaxEndingHere += v[i];
} else {
MaxStart = i;
MaxEndingHere = v[i];
}
if (MaxEndingHere > MaxSum) {
MaxSum = MaxEndingHere;
end = i;
}
}
//seocnd pass
for (int i = 1; i < MaxStart; i++) {
if (MaxEndingHere > 0) {
MaxEndingHere += v[i];
} else {
break;
}
if (MaxEndingHere > MaxSum) {
MaxSum = MaxEndingHere;
end = i;
}
}
g << MaxSum << " " << MaxStart << " " << (n - MaxStart + end + 1);
f.close();
g.close();
}