L2-012. 关于堆的判断
参考博客
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<map>
6
7 using namespace std;
8
9 int n, a[1005];
10
11 //建树的 “模板”
12 void up( int son )
13 {
14 int t = a[son];
15 int tson = son;
16 while( (tson > 1)&&( a[tson/2] > t))
17 {
18 a[tson] = a[tson/2];
19 tson = tson/2;
20 }
21 a[tson] = t;
22 }
23
24 void charu( int t)
25 {
26 a[ ++n ] = t;
27 up( n );
28 }
29
30
31 int main ()
32 {
33 int k, m, x, y;;
34 map <int, int> index; //记录下标
35 string s;
36 cin >> k >> m;
37 n=0;
38 //建树
39 for(int i=0; i<k; i++)
40 {
41 cin >> x;
42 charu(x);
43 }
44 //给map赋值
45 for(int i=1; i<=n; i++)
46 {
47 index[a[i]] = i;
48 }
49 for(int i=0; i<m; i++)
50 {
51 cin >> x;
52 cin >> s;
53 int index_x = index[x];
54 int index_y;
55 if(s[0] == 'a')
56 {
57 cin >> y;
58 getline(cin, s); //这个函数可以输入一个带空格的字符串
59 index_y = index[y];
60 if(index_x/2 == index_y/2)
61 puts("T");
62 else
63 puts("F");
64 }
65 else
66 {
67 cin >> s;
68 cin >> s;
69 if(s[0] == 'r')
70 {
71 if(index_x == 1)
72 puts("T");
73 else
74 puts("F");
75 }
76 else if(s[0] == 'p')
77 {
78 cin >> s;
79 cin >> y;
80 index_y = index[y];
81 if(index_y/2 == index_x)
82 puts("T");
83 else
84 puts("F");
85
86 }
87 else
88 {
89 cin >> s;
90 cin >> y;
91 index_y = index[y];
92 if(index_x/2 == index_y)
93 puts("T");
94 else
95 puts("F");
96 }
97 }
98 }
99
100 return 0;
101 }