#include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pii pair<int, int> #define pb push_back const int s1 = (int)1e5 + 5; const int s2 = (int)1e6 + 5; const int inf = (int)1e9; int ceo[s1], siz[s1], tim[s1][2], jump[s1][20], maxi[s1][20], tree[s1][20], ans[s2]; bool iss[s2]; vector<vector<int>>v; vector<pii>mst[s1]; int find_(int i) { if (ceo[i] == i) return i; return ceo[i] = find_(ceo[i]); } void union_(int a, int b) { a = find_(a); b = find_(b); if (siz[b] > siz[a]) swap (a, b); ceo[b] = a; siz[a] += siz[b]; } int it = 1; void dfs_tim(int node, int par) { tim[node][0] = it++; for (pii i : mst[node]) { if (i.first != par) dfs_tim(i.first, node); } tim[node][1] = it++; } void dfs_jump(int node, int par) { jump[node][0] = par; for (int i = 1; i <= 17; i++) jump[node][i] = jump[jump[node][i - 1]][i - 1]; for (int i = 1; i <= 17; i++) maxi[node][i] = max(maxi[node][i - 1], maxi[jump[node][i - 1]][i - 1]); for (pii i : mst[node]) { if (i.first != par) { maxi[i.first][0] = i.second; dfs_jump(i.first, node); } } } void dfs_ans(int node, int par) { for (pii i : mst[node]) { if (i.first != par) dfs_ans(i.first, node); } int mini = inf; for (int i = 17; i >= 1; i--) { tree[jump[node][i - 1]][i - 1] = min(tree[node][i], tree[jump[node][i - 1]][i - 1]); tree[node][i - 1] = min(tree[node][i], tree[node][i - 1]); } } bool is_anc(int a, int b) { return ((tim[a][0] <= tim[b][0]) & (tim[a][1] >= tim[b][1])); } int lca_(int a, int b) { if (is_anc(a, b)) return a; if (is_anc(b, a)) return b; for (int i = 17; i >= 0; i--) { if (!is_anc(jump[b][i], a)) b = jump[b][i]; } return jump[b][0]; } int max_path(int a, int b) { int maxx = 0, lcaab = lca_(a, b); for (int i = 17; i >= 0; i--) { if (!is_anc(jump[a][i], lcaab)) { maxx = max(maxx, maxi[a][i]); a = jump[a][i]; } if (!is_anc(jump[b][i], lcaab)) { maxx = max(maxx, maxi[b][i]); b = jump[b][i]; } } if (a != lcaab) maxx = max(maxx, maxi[a][0]); if (b != lcaab) maxx = max(maxx, maxi[b][0]); return maxx; } void add_(int a, int b, int val) { int lcaab = lca_(a, b); for (int i = 17; i >= 0; i--) { if (!is_anc(jump[a][i], lcaab)) { tree[a][i] = min(tree[a][i], val); a = jump[a][i]; } if (!is_anc(jump[b][i], lcaab)) { tree[b][i] = min(tree[b][i], val); b = jump[b][i]; } } if (a != lcaab) tree[a][0] = min(tree[a][0], val); if (b != lcaab) tree[b][0] = min(tree[b][0], val); } void f() { //input int n, licz = 0; cin >> n; for (int i = 1; i <= n; i++) { string a; cin >> a; int b; cin >> b; if (a == "TAK") { if (licz < 10) cout << i << " ", licz++; else if (licz < 20 && b < 2) cout << i << " ", licz++; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); }
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 | #include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pii pair<int, int> #define pb push_back const int s1 = (int)1e5 + 5; const int s2 = (int)1e6 + 5; const int inf = (int)1e9; int ceo[s1], siz[s1], tim[s1][2], jump[s1][20], maxi[s1][20], tree[s1][20], ans[s2]; bool iss[s2]; vector<vector<int>>v; vector<pii>mst[s1]; int find_(int i) { if (ceo[i] == i) return i; return ceo[i] = find_(ceo[i]); } void union_(int a, int b) { a = find_(a); b = find_(b); if (siz[b] > siz[a]) swap (a, b); ceo[b] = a; siz[a] += siz[b]; } int it = 1; void dfs_tim(int node, int par) { tim[node][0] = it++; for (pii i : mst[node]) { if (i.first != par) dfs_tim(i.first, node); } tim[node][1] = it++; } void dfs_jump(int node, int par) { jump[node][0] = par; for (int i = 1; i <= 17; i++) jump[node][i] = jump[jump[node][i - 1]][i - 1]; for (int i = 1; i <= 17; i++) maxi[node][i] = max(maxi[node][i - 1], maxi[jump[node][i - 1]][i - 1]); for (pii i : mst[node]) { if (i.first != par) { maxi[i.first][0] = i.second; dfs_jump(i.first, node); } } } void dfs_ans(int node, int par) { for (pii i : mst[node]) { if (i.first != par) dfs_ans(i.first, node); } int mini = inf; for (int i = 17; i >= 1; i--) { tree[jump[node][i - 1]][i - 1] = min(tree[node][i], tree[jump[node][i - 1]][i - 1]); tree[node][i - 1] = min(tree[node][i], tree[node][i - 1]); } } bool is_anc(int a, int b) { return ((tim[a][0] <= tim[b][0]) & (tim[a][1] >= tim[b][1])); } int lca_(int a, int b) { if (is_anc(a, b)) return a; if (is_anc(b, a)) return b; for (int i = 17; i >= 0; i--) { if (!is_anc(jump[b][i], a)) b = jump[b][i]; } return jump[b][0]; } int max_path(int a, int b) { int maxx = 0, lcaab = lca_(a, b); for (int i = 17; i >= 0; i--) { if (!is_anc(jump[a][i], lcaab)) { maxx = max(maxx, maxi[a][i]); a = jump[a][i]; } if (!is_anc(jump[b][i], lcaab)) { maxx = max(maxx, maxi[b][i]); b = jump[b][i]; } } if (a != lcaab) maxx = max(maxx, maxi[a][0]); if (b != lcaab) maxx = max(maxx, maxi[b][0]); return maxx; } void add_(int a, int b, int val) { int lcaab = lca_(a, b); for (int i = 17; i >= 0; i--) { if (!is_anc(jump[a][i], lcaab)) { tree[a][i] = min(tree[a][i], val); a = jump[a][i]; } if (!is_anc(jump[b][i], lcaab)) { tree[b][i] = min(tree[b][i], val); b = jump[b][i]; } } if (a != lcaab) tree[a][0] = min(tree[a][0], val); if (b != lcaab) tree[b][0] = min(tree[b][0], val); } void f() { //input int n, licz = 0; cin >> n; for (int i = 1; i <= n; i++) { string a; cin >> a; int b; cin >> b; if (a == "TAK") { if (licz < 10) cout << i << " ", licz++; else if (licz < 20 && b < 2) cout << i << " ", licz++; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); } |