Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.93 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3. import java.math.BigInteger;
  4. import java.awt.geom.Point2D;
  5.  
  6. public class Main implements Runnable {
  7.  
  8.     Map<Integer, Integer> compressed;
  9.     Map<Integer, Integer> real;
  10.     private void solution() throws IOException {
  11.         int ts = in.nextInt();
  12.         while (ts-- > 0) {
  13.             int n = in.nextInt();
  14.  
  15.             compressed = new HashMap<Integer, Integer>();
  16.             real = new HashMap<Integer, Integer>();
  17.             List<Integer> all = new ArrayList<Integer>();
  18.            
  19.             for (int i = 0; i < n; ++i) {
  20.                 int x = in.nextInt();
  21.                 all.add(x);
  22.             }
  23.             int m = in.nextInt();
  24.             int[] req = new int[n + m];
  25.             Arrays.fill(req, Integer.MAX_VALUE);
  26.             for (int i = 0; i < n; ++i) {
  27.                 req[i] = all.get(i);
  28.             }
  29.            
  30.             for (int i = 0; i < m; ++i) {
  31.                 String command = in.next();
  32.                 if (command.equals("add")) {
  33.                     int x = in.nextInt();
  34.                     req[n + i] = x;
  35.                     all.add(x);
  36.                 }
  37.             }
  38.             Collections.sort(all);
  39.             compress(all);
  40.            
  41.             int size = Integer.highestOneBit(all.size()) << 1;
  42.             int[] sum = new int[size * 2];
  43.            
  44.            
  45.             for (int i = 0; i < req.length; ++i) {
  46.                 if (req[i] == Integer.MAX_VALUE) {
  47.                     out.println(real.get(get(1, (sum[1] + 1) / 2, sum) - size));
  48.                 } else {
  49.                     add(compressed.get(req[i]), sum);
  50.                 }
  51.             }
  52.         }
  53.     }
  54.  
  55.     private int get(int at, int need, int[] sum) {
  56.         if (2 * at >= sum.length) {
  57.             return at;
  58.         }
  59.        
  60.         if (sum[2 * at] >= need) {
  61.             return get(2 * at, need, sum);
  62.         } else {
  63.             return get(2 * at + 1, need - sum[2 * at], sum);
  64.         }
  65.     }
  66.  
  67.     private void add(int i, int[] sum) {
  68.         i += sum.length >> 1;
  69.         while (i > 0) {
  70.             ++sum[i];
  71.             i >>= 1;
  72.         }
  73.     }
  74.  
  75.     private void compress(List<Integer> all) {
  76.         for (int x : all) {
  77.             if (!compressed.containsKey(x)) {
  78.                 int size = compressed.size();
  79.                 compressed.put(x, size);
  80.                 real.put(size, x);
  81.             }
  82.         }
  83.     }
  84.  
  85.     @Override
  86.     public void run() {
  87.         try {
  88.             solution();
  89.             in.reader.close();
  90.             out.close();
  91.         } catch (IOException e) {
  92.             e.printStackTrace();
  93.             System.exit(1);
  94.         }
  95.     }
  96.    
  97.     private class Scanner {
  98.         BufferedReader reader;
  99.         StringTokenizer tokenizer;
  100.        
  101.         public Scanner(Reader reader) {
  102.             this.tokenizer = new StringTokenizer("");
  103.             this.reader = new BufferedReader(reader);
  104.         }
  105.        
  106.         public boolean hasNext() throws IOException {
  107.             while (!tokenizer.hasMoreTokens()) {
  108.                 String line = reader.readLine();
  109.                 if (line == null) {
  110.                     return false;
  111.                 }
  112.                 tokenizer = new StringTokenizer(line);
  113.             }
  114.             return true;
  115.         }
  116.        
  117.         public String next() throws IOException  {
  118.             hasNext();
  119.             return tokenizer.nextToken();
  120.         }
  121.        
  122.         public String nextLine() throws IOException {
  123.             tokenizer = new StringTokenizer("");
  124.             return reader.readLine();
  125.         }
  126.        
  127.        
  128.         public int nextInt() throws IOException {
  129.             return Integer.parseInt(next());
  130.         }
  131.        
  132.     }
  133.     public static void main(String[] args) {
  134.         new Thread(null, new Main(), "Main", 1 << 28).start();
  135.     }
  136.  
  137.     Scanner in = new Scanner(new InputStreamReader(System.in));
  138.     PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement