Pagini recente » Cod sursa (job #598725) | Cod sursa (job #2213731) | Cod sursa (job #1177569) | Cod sursa (job #935337) | Cod sursa (job #3243358)
#include <bits/stdc++.h>
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
//#define fin cin
//#define fout cout
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int n;
vector<int> v(200001);
vector<bool> hasBeenStart(200001);
struct a {
int value;
int index;
int length;
} curr, ans;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
bool type;
fin >> v[i] >> type;
if (!type) {
v[i] *= -1;
}
}
curr = ans = {v[1],1,1};
hasBeenStart[1] = true;
for (int i = 2; !hasBeenStart[curr.index] or curr.length <= n; i++, i = i > n ? 1 : i, curr.length++) {
if (curr.value + v[i] >= v[i]) {
curr.value += v[i];
if (ans.value < curr.value) {
ans = curr;
} else if (ans.value == curr.value and (ans.length < curr.length or ans.index < curr.index)) {
ans = curr;
}
} else {
curr.value = v[i];
curr.length = 1;
curr.index = i;
hasBeenStart[curr.index] = true;
if (ans.value < curr.value) {
ans = curr;
} else if (ans.value == curr.value and (ans.length < curr.length or ans.index < curr.index)) {
ans = curr;
}
}
}
fout << ans.value << ' ' << ans.index << ' ' << ans.length;
return 0;
}