Pagini recente » Cod sursa (job #2128939) | Cod sursa (job #862265) | Cod sursa (job #1049801) | Cod sursa (job #335316) | Cod sursa (job #3167256)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
struct buline{
int value;
friend istream& operator>>(istream& os, buline &var){
short type;
os>>var.value>>type;
if(!type)
var.value *= -1;
return os;
}
};
struct answer{
int value;
int start;
int length;
friend ostream& operator<<(ostream& os, answer ans){
os<<ans.value<<' '<<ans.start<<' '<<ans.length;
}
} ans;
int n;
vector<int> v;
vector<int> sir;
int main()
{
fin>>n;
buline aux;
fin>>aux;
ans = {aux.value, 1, 1};
sir.push_back(aux.value);
v.push_back(aux.value);
for(int i = 2; i <= n; i++){
fin>>aux;
sir.push_back(aux.value);
}
int left;
for(int i = 2; i <= n; i++){
if(v.back() + sir[i - 1] > sir[i - 1])
v.push_back(v.back() + sir[i - 1]);
else
left=i,v.push_back(sir[i -1 ]);
if(v.back() > ans.value)
ans = {v.back(), left, i - left + 1};
}
if(v.back() + sir.front() > sir.front()){
int index = 1;
v.front() = v.back() + sir.front();
ans.length++;
int mem_length = ans.length;
for(int i = 1; i < left - 1; i++){
if(v[i - 1] + sir[i] > sir[i])
v[i] = v[i - 1] + sir[i];
else
v[i] = sir[i];
if(ans.value < v[i])
ans.value = v[i], ans.length = ans.length + i;
}
}
fout<<ans;
return 0;
}