#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(); } |
English