0%
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
import java.io.OutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.StringTokenizer; import java.util.Random; import java.io.IOException; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.InputStream; import java.io.PrintStream; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import java.math.*; import java.util.*;
public class buylow { public static void main(String[] args) { InputStream inputStream = null; try { inputStream = new FileInputStream("buylow.in"); OutputStream outputStream = new PrintStream("buylow.out"); InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); Slover slove = new Slover(); slove.slove(in, out); out.close(); } catch (FileNotFoundException ex) { Logger.getLogger(buylow.class.getName()).log(Level.SEVERE, null, ex); } } static class Slover { public void slove(InputReader in, PrintWriter out) { int n = in.nextInt(); int[] a = new int[n + 2]; int[] len = new int[n + 2]; BigInteger[] dp = new BigInteger[n + 2]; for (int i = 1; i <= n; ++i) { a[i] = in.nextInt(); len[i] = 1; dp[i] = BigInteger.ONE; } dp[n + 1] = BigInteger.ONE; ++n; int ans = 0; for (int i = 2; i <= n; ++i) { TreeSet<Integer> S = new TreeSet<Integer> (); for (int j = i - 1; j > 0; --j) { if (a[i] < a[j] && len[i] <= len[j] + 1) { if (len[i] < len[j] + 1) { len[i] = len[j] + 1; dp[i] = dp[j]; if (len[i] > len[ans]) { ans = i; } } else if (!S.contains(a[j])) { dp[i] = dp[i].add(dp[j]); } S.add(a[j]); } } } out.println(len[ans] - 1 + " " + dp[ans]); out.flush(); } } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public boolean hasNext() { try { return reader.ready(); } catch (IOException ex) { Logger.getLogger(buylow.class.getName()).log(Level.SEVERE, null, ex); } return false; }
public long nextLong() { return Long.parseLong(next()); } public int nextInt() { return Integer.parseInt(next()); } public double nextDouble() { return Double.parseDouble(next()); } } }
|