Pagini recente » Cod sursa (job #2928128) | Cod sursa (job #2983771) | Cod sursa (job #2955203) | Cod sursa (job #2415497) | Cod sursa (job #3289311)
#include <fstream>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
const int Nmax = 200000;
int v[2 * Nmax + 5];
int main() {
int n;
fin >> n;
for (int i = 1; i <= n; i++) {
int x, p;
fin >> x >> p;
v[i] = (p == 1) ? x : -x;
v[n + i] = v[i]; // Extindem vectorul pentru circularitate
}
int maxSum = -1e9, curSum = 0;
int bestStart = 1, bestLength = n;
int start = 1;
for (int i = 1; i <= 2 * n; i++) {
if (curSum < 0) {
curSum = 0;
start = i; // Începem o nouă secvență
}
curSum += v[i];
int length = i - start + 1;
if (length > n) break; // Ne asigurăm că secvența nu depășește N
if (curSum > maxSum || (curSum == maxSum && (start < bestStart || (start == bestStart && length < bestLength)))) {
maxSum = curSum;
bestStart = start;
bestLength = length;
}
}
fout << maxSum << " " << ((bestStart - 1) % n) + 1 << " " << bestLength;
return 0;
}