Pagini recente » Cod sursa (job #1669591) | Cod sursa (job #2875200) | Cod sursa (job #1826309) | Cod sursa (job #1646384) | Cod sursa (job #3345361)
import java.io.*;
public class Main {
// Clasă pentru citirea extrem de rapidă a datelor (Fast I/O)
static class FastReader {
private InputStream stream;
private byte[] buf = new byte[16384]; // Buffer de 16KB
private int curChar;
private int numChars;
public FastReader(String file) throws FileNotFoundException {
this.stream = new FileInputStream(file);
}
private int read() {
if (numChars == -1) return -1;
if (curChar >= numChars) {
curChar = 0;
try {
numChars = stream.read(buf);
} catch (IOException e) {
return -1;
}
if (numChars <= 0) return -1;
}
return buf[curChar++];
}
public int nextInt() {
int c = read();
while (isSpaceChar(c)) {
c = read();
}
int sgn = 1;
if (c == '-') {
sgn = -1;
c = read();
}
int res = 0;
do {
res = res * 10 + (c - '0');
c = read();
} while (!isSpaceChar(c));
return res * sgn;
}
private boolean isSpaceChar(int c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}
}
public static void main(String[] args) {
try {
// Inițializăm cititorul și scriitorul pentru fișiere
FastReader in = new FastReader("ssm.in");
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("ssm.out")));
int n = in.nextInt();
// Variabilele pentru Algoritmul lui Kadane
int maxSum = Integer.MIN_VALUE;
int currentSum = 0;
int bestStart = 1, bestEnd = 1, currentStart = 1;
for (int i = 1; i <= n; i++) {
int val = in.nextInt();
currentSum += val;
// Dacă am găsit o sumă strict mai mare, actualizăm
if (currentSum > maxSum) {
maxSum = currentSum;
bestStart = currentStart;
bestEnd = i;
}
// Dacă suma devine negativă, o resetăm pentru că va "trage în jos" elementele viitoare
if (currentSum < 0) {
currentSum = 0;
currentStart = i + 1; // Următoarea subsecvență posibilă începe de la i + 1
}
}
// Scriem rezultatul
out.println(maxSum + " " + bestStart + " " + bestEnd);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}