Submission #1083779

#TimeUsernameProblemLanguageResultExecution timeMemory
1083779bvdArt Exhibition (JOI18_art)Java
50 / 100
1065 ms35624 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;
			long minSoFar = (long) 4e18;
			long result = 0;
			for (int i=0; i<n; ++i) {
				f[i+1] = f[i] + artworks[i].b;
				
				result = Math.max(result, artworks[i].b);
				long tmp = f[i+1] - artworks[i].a;
				result = Math.max(result, tmp - minSoFar);
				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...