제출 #1083777

#제출 시각아이디문제언어결과실행 시간메모리
1083777bvdArt Exhibition (JOI18_art)Java
50 / 100
1051 ms48368 KiB
import java.util.Arrays; import java.util.StringTokenizer; import java.io.BufferedReader; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.OutputStream; public class art { private static class Kattio extends PrintWriter { public Kattio(InputStream i) { super(new BufferedOutputStream(System.out)); r = new BufferedReader(new InputStreamReader(i)); } public Kattio(InputStream i, OutputStream o) { super(new BufferedOutputStream(o)); r = new BufferedReader(new InputStreamReader(i)); } public boolean hasMoreTokens() { return peekToken() != null; } public int getInt() { return Integer.parseInt(nextToken()); } public double getDouble() { return Double.parseDouble(nextToken()); } public long getLong() { return Long.parseLong(nextToken()); } public String getWord() { return nextToken(); } private BufferedReader r; private String line; private StringTokenizer st; private String token; private String peekToken() { if (token == null) try { while (st == null || !st.hasMoreTokens()) { line = r.readLine(); if (line == null) return null; st = new StringTokenizer(line); } token = st.nextToken(); } catch (IOException e) { } return token; } private String nextToken() { String ans = peekToken(); token = null; return ans; } } private static final class Artwork { public final long a; public final int b; public Artwork(long a, int b) { this.a = a; this.b = b; } } private static int clamp(long x,int min,int max) { if (x < min) return min; if (x > max) return max; return (int) x; } public static void main(String[] args) { try (Kattio io = new Kattio(System.in, System.out)) { int n = io.getInt(); Artwork[] artworks = new Artwork[n]; for (int i=0; i<n; ++i) { artworks[i] = new Artwork(io.getLong(), io.getInt()); } Arrays.sort(artworks, (t, o) -> clamp(t.a - o.a, -1, 1)); long[] f = new long[n+1]; f[0] = 0; for (int i=0; i<n; ++i) { f[i+1] = f[i] + artworks[i].b; } long minSoFar = (long) 4e18; long result = 0; for (int i=0; i<n; ++i) { result = Math.max(result, artworks[i].b); long tmp = f[i+1] - artworks[i].a; result = Math.max(result, tmp - minSoFar); if (i+1 < n) minSoFar = Math.min(minSoFar, f[i] - artworks[i].a); } io.println(result); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...