Pagini recente » Cod sursa (job #2883723) | Cod sursa (job #2171354) | Cod sursa (job #610655) | Cod sursa (job #234373) | Cod sursa (job #2198505)
#include<fstream>
#include<climits>
using namespace std;
const int INF = INT_MAX;
class InParser{
private:
static const int buffSZ = (1 << 15);
char buff[buffSZ];
int buffPos;
ifstream File;
inline void _advance(){
if(++buffPos == buffSZ){
buffPos = 0;
File.read(buff, buffSZ);
}
}
public:
InParser(const char *FileName){
File.open(FileName);
buffPos = buffSZ - 1;
}
inline InParser &operator >>(int &no){
int sgn = 1;
while(!isdigit(buff[buffPos])){
if(buff[buffPos] == '-')
sgn = -1;
_advance();
}
no = 0;
while(isdigit(buff[buffPos])){
no = no * 10 + buff[buffPos] - '0';
_advance();
}
no *= sgn;
return *this;
}
};
int partialSum, leftIndex = 1, maxSum = -INF, index, number, numbersCount, leftForAnswer, rightForAnswer;
int main(){
InParser fin("ssm.in");
ofstream fout("ssm.out");
fin >> numbersCount;
for(index = 1; index <= numbersCount; ++index){
fin >> number;
partialSum += number;
if(partialSum > maxSum){
maxSum = partialSum;
rightForAnswer = index;
leftForAnswer = leftIndex;
}
if(partialSum < 0){
partialSum = 0;
leftIndex = index + 1;
}
}
fout << maxSum << ' ' << leftForAnswer << ' ' << rightForAnswer;
}