import java.io.*;
import coba.Queue;
import coba.StdOut;
import java.lang.reflect.Array;
import java.util.*;
public class TP3 {
private static InputReader in;
private static long N;
private static long N1;
private static String[] kandidat
;
private static BST
<Long, Long
> selisihTree
= new BST
<Long, Long
>();
private static int[] persenSatu = new int[101];
private static int[] persenDua = new int[101];
private static int menangSatu = 0;
private static int menangDua = 0;
private static HashMap
<String,
Object[]> Tree
= new HashMap
<>();
private static ArrayList<String> provinsi = new ArrayList<>();
in
= new InputReader
(System.
in);
kandidat
= new String[]{in.
next(), in.
next()}; N = in.nextInt();
for (int i = 0; i < N; i++) {
if(i==0) {
line = in.nextLine().split(" ");
Tree.
put((String) line
[0],
new Object[]{(long)0,
(long)0,
null,
0, line
[0]}); selisihTree.put((long)0, 1);
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
for(int j = 2; j < line.length; j++) {
Tree.
put((String) line
[j
],
new Object[]{(long)0,
(long)0, line
[0],
(Integer) Tree.
get(line
[0])[3]+1, line
[j
]}); provinsi.
add((String) line
[j
]);// selisihTree.put((long)0, 1);
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
}
}else{
line = in.nextLine().split(" ");
for(int j = 2; j < line.length; j++) {
Tree.
put((String) line
[j
],
new Object[]{(long)0,
(long)0, line
[0],
(Integer) Tree.
get(line
[0])[3]+1, line
[j
]});// selisihTree.put((long)0, 1);
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
}
}
}
N1 = in.nextInt();
for (int i = 0; i < N1; i++) {
line = in.nextLine().split(" ");
if(line[0].equals("TAMBAH")) {
}else if(line[0].equals("ANULIR")) {
}else if(line[0].equals("CEK_SUARA")) {
System.
out.
println(Tree.
get(line
[1])[0] + " " + Tree.
get(line
[1])[1]); }else if(line[0].equals("WILAYAH_MENANG")) {
if(line[1].equals(kandidat[0])) {
System.
out.
println(menangSatu
); }else{
System.
out.
println(menangDua
); }
}else if(line[0].equals("CEK_SUARA_PROVINSI")) {
System.
out.
println(Tree.
get(s
)[4] + " " + Tree.
get(s
)[0] + " " + Tree.
get(s
)[1]); }
}else if(line[0].equals("WILAYAH_MINIMAL")) {
if(line[1].equals(kandidat[0])) {
}else{
}
}else if(line[0].equals("WILAYAH_SELISIH")) {
System.
out.
println(Tree.
size());} // else {
// System.out.println((selisihTree.count() - selisihTree.rank(Long.parseLong((String)line[1]))));
// }
}
}
}
// taken from https://c...content-available-to-author-only...s.com/submissions/Petr
static class InputReader {
tokenizer = null;
}
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
}
}
return tokenizer.nextToken();
}
public long nextInt() {
return Long.
parseLong(next
()); }
return reader.readLine();
}
}
public static void tambah
(String wilayah,
long satu,
long dua
) { if((long)Tree.get(wilayah)[0] > (long)Tree.get(wilayah)[1] ) {
menangSatu--;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]))] -= 1;
} else if((long)Tree.get(wilayah)[0] < (long)Tree.get(wilayah)[1]) {
menangDua--;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] -= 1;
persenDua[100 - (int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1])] -= 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] -= 1;
persenDua[(int) hitungPersentase(0, 0)] -= 1;
}
selisihTree.delete(hitungSelisih((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]));
Tree.get(wilayah)[0] = (long) Tree.get(wilayah)[0] + satu;
Tree.get(wilayah)[1] = (long) Tree.get(wilayah)[1] + dua;
selisihTree.put(hitungSelisih((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]), 1);
if((long)Tree.get(wilayah)[0] > (long)Tree.get(wilayah)[1] ) {
menangSatu++;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]))] += 1;
} else if((long)Tree.get(wilayah)[0] < (long)Tree.get(wilayah)[1]) {
menangDua++;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] += 1;
persenDua[100 - (int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1])] += 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
}
while(current != null) {
if((long)Tree.get(current)[0] > (long)Tree.get(current)[1] ) {
menangSatu--;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] -= 1;
} else if((long)Tree.get(current)[0] < (long)Tree.get(current)[1]) {
menangDua--;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] -= 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] -= 1;
persenDua[(int) hitungPersentase(0, 0)] -= 1;
}
selisihTree.delete(hitungSelisih((long)Tree.get(current)[0], (long)Tree.get(current)[1]));
Tree.get(current)[0] = (long) Tree.get(current)[0] + satu;
Tree.get(current)[1] = (long) Tree.get(current)[1] + dua;
selisihTree.put(hitungSelisih((long)Tree.get(current)[0], (long)Tree.get(current)[1]), 1);
if((long)Tree.get(current)[0] > (long)Tree.get(current)[1] ) {
menangSatu++;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] += 1;
} else if((long)Tree.get(current)[0] < (long)Tree.get(current)[1]) {
menangDua++;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] += 1;
}else {
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
}
current
= (String)Tree.
get(current
)[2]; }
}
public static void anulir
(String wilayah,
long satu,
long dua
) { if((long)Tree.get(wilayah)[0] > (long)Tree.get(wilayah)[1] ) {
menangSatu--;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]))] -= 1;
} else if((long)Tree.get(wilayah)[0] < (long)Tree.get(wilayah)[1]) {
menangDua--;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] -= 1;
persenDua[100 - (int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1])] -= 1;
}else {
persenSatu[(int) hitungPersentase(0, 0)] -= 1;
persenDua[(int) hitungPersentase(0, 0)] -= 1;
}
// selisihTree.delete(hitungSelisih((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]));
Tree.get(wilayah)[0] = (long) Tree.get(wilayah)[0] - satu;
Tree.get(wilayah)[1] = (long) Tree.get(wilayah)[1] - dua;
// selisihTree.put(hitungSelisih((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]), 1);
if((long)Tree.get(wilayah)[0] > (long)Tree.get(wilayah)[1] ) {
menangSatu++;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1]))] += 1;
} else if((long)Tree.get(wilayah)[0] < (long)Tree.get(wilayah)[1]) {
menangDua++;
persenSatu[(int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1] )] += 1;
persenDua[100 - (int) hitungPersentase((long)Tree.get(wilayah)[0], (long)Tree.get(wilayah)[1])] += 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] += 1;
persenDua[(int) hitungPersentase(0, 0)] += 1;
}
while(current != null) {
if((long)Tree.get(current)[0] > (long)Tree.get(current)[1] ) {
menangSatu--;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] -= 1;
} else if((long)Tree.get(current)[0] < (long)Tree.get(current)[1]) {
menangDua--;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] -= 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] -= 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] -= 1;
persenDua[(int) hitungPersentase(0, 0)] -= 1;
}
// selisihTree.delete((hitungSelisih((long)Tree.get(current)[0], (long)Tree.get(current)[1])));
Tree.get(current)[0] = (long) Tree.get(current)[0] - satu;
Tree.get(current)[1] = (long) Tree.get(current)[1] - dua;
// selisihTree.put((hitungSelisih((long)Tree.get(current)[0], (long)Tree.get(current)[1])), 1);
if((long)Tree.get(current)[0] > (long)Tree.get(current)[1] ) {
menangSatu++;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] += 1;
} else if((long)Tree.get(current)[0] < (long)Tree.get(current)[1]) {
menangDua++;
persenSatu[(int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1] )] += 1;
persenDua[100-((int) hitungPersentase((long)Tree.get(current)[0], (long)Tree.get(current)[1]))] += 1;
} else {
persenSatu[(int) hitungPersentase(0, 0)] -= 1;
persenDua[(int) hitungPersentase(0, 0)] -= 1;
}
current
= (String)Tree.
get(current
)[2]; }
}
public static double hitungPersentase(long satu, long dua) {
if(satu == 0 && dua == 0){
return 50;
}
else {
return ((satu * 100/(satu+dua)));
}
}
public static int hitungMinimal(int[] arr, int minimal) {
int count = 0;
for(int i=minimal; i < arr.length; i++) {
count += arr[i];
}
return count;
}
public static long hitungSelisih(long a, long b) {
}
static class BST
<Key extends Comparable
<Key
>, Value
> { private Node root; // root of BST
private class Node {
private Key key
; // sorted by key private int val; // associated data
private Node left, right; // left and right subtrees
private int size; // number of nodes in subtree
private int count;
public Node
(Key key,
int val,
int size
) { this.key = key;
this.val = val;
this.size = size;
this.count = val;
}
@Override
}
}
public BST() {
}
public boolean isEmpty() {
return size() == 0 && count() == 0;
}
public int size() {
return size(root);
}
private int size(Node x) {
if (x == null) return 0;
else {
return x.size;
}
}
public int count() {
return count(root);
}
private int count(Node x) {
if (x == null) return 0;
else {
return x.count;
}
}
public void put
(Key key,
int val
) { if (val == 0) {
delete(key);
return;
}
root = put(root, key, val);
}
private Node put
(Node x,
Key key,
int val
) { if (x == null) return new Node(key, val, 1);
int cmp = key.compareTo(x.key);
if (cmp < 0) x.left = put(x.left, key, val);
else if (cmp > 0) x.right = put(x.right, key, val);
else x.val++;
x.size = 1 + size(x.left) + size(x.right);
x.count = x.val + count(x.left) + count(x.right);
return x;
}
public void deleteMin() {
root = deleteMin(root);
}
private Node deleteMin(Node x) {
if (x.left == null) return x.right;
x.left = deleteMin(x.left);
x.size = size(x.left) + size(x.right) + 1;
x.count = count(x.left) + count(x.right) + x.val;
return x;
}
public void delete
(Key key
) { root = delete(root, key);
}
private Node delete
(Node x,
Key key
) { if (x == null) return null;
int cmp = key.compareTo(x.key);
if (cmp < 0) x.left = delete(x.left, key);
else if (cmp > 0) x.right = delete(x.right, key);
else {
if(x.val == 1) {
if (x.right == null) return x.left;
if (x.left == null) return x.right;
Node t = x;
x = min(t.right);
x.right = deleteMin(t.right);
x.left = t.left;
}else {
x.val--;
}
}
x.size = size(x.left) + size(x.right) + 1;
x.count = count(x.left) + count(x.right) + x.val;
return x;
}
return min(root).key;
}
private Node min(Node x) {
if (x.left == null) return x;
else return min(x.left);
}
public int rank
(Key key
) { return rank(key, root);
}
private int rank
(Key key, Node x
) { if (x == null) return 0;
int cmp = key.compareTo(x.key);
if (cmp < 0) return rank(key, x.left);
else if (cmp > 0) return x.val + count(x.left) + rank(key, x.right);
else return count(x.left);
}
}}