Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.util.Scanner;
- public class big_maximum_sum_ahmed_java_ac {
- static int n, m;
- static long[] gen = new long[50], lft = new long[50], rght = new long[50],
- tot = new long[50];
- public static void main(String[] args) {
- BufferedReader bfin = new BufferedReader(new InputStreamReader(
- System.in));
- BufferedWriter bfout = new BufferedWriter(new OutputStreamWriter(
- System.out));
- Scanner cin = new Scanner(bfin);
- PrintWriter cout = new PrintWriter(bfout);
- n = cin.nextInt();
- m = cin.nextInt();
- int len, num;
- for (int i = 0; i < n; i++) {
- len = cin.nextInt();
- int mx = -(1 << 30);
- int sum = 0;
- for (int j = 0; j < len; j++) {
- num = cin.nextInt();
- tot[i] += num;
- lft[i] = Math.max(lft[i], tot[i]);
- rght[i] = Math.min(rght[i], tot[i]);
- mx = Math.max(mx, num);
- sum += num;
- if (sum < 0)
- sum = 0;
- else
- mx = Math.max(mx, sum);
- }
- gen[i] = mx;
- rght[i] = tot[i] - rght[i];
- }
- long cur = 0;
- long best = (long) (-1e18);
- while (m-- > 0) {
- int i;
- i = cin.nextInt();
- i--;
- best = Math.max(best, gen[i]);
- if (cur > 0)
- best = Math.max(best, cur + lft[i]);
- cur = Math.max(0, Math.max(rght[i], cur + tot[i]));
- }
- System.out.println(best);
- cout.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement