#include <bits/stdc++.h>
#include "teams.h"
#define maxn 100005
#define fi first
#define se second
using namespace std;
using ii = pair<int, int>;
int n, a[maxn], b[maxn], m, k[maxn];
struct event {
    int type, x, cnt = 0;
    event() {}
    event(int _type, int _x, int _cnt) : type(_type), x(_x), cnt(_cnt) {}
    bool operator < (const event &other) const {
        if (x != other.x) return x < other.x;
        return type < other.type;
    }
} e[3*maxn];
int cl[maxn];
int solve() {
    int id = 0;
    for (int i = 1; i <= n; i++) cl[i] = 0;
    for (int i = 1; i <= n; i++) e[++id] = event(1, a[i], i);
    for (int i = 1; i <= n; i++) e[++id] = event(3, b[i], i);
    for (int i = 1; i <= m; i++) e[++id] = event(2, k[i], k[i]);
    sort(e + 1, e + id + 1);
    set<ii> s;
    for (int o = 1; o <= id; o++) {
        auto [type, x, cnt] = e[o];
        if (type == 1) {
            s.insert(ii{b[cnt], cnt});
            continue;
        }
        if (type == 3) {
            s.erase(ii{b[cnt], cnt});
            continue;
        }
        if (s.size() < cnt) return 0;
        while (cnt--) s.erase(s.begin());
    }
    return 1;
}
void init(int N, int A[], int B[]) {
    n = N;
    for (int i = 1; i <= n; i++) a[i] = A[i-1];
    for (int i = 1; i <= n; i++) b[i] = B[i-1];
}
int can(int M, int K[]) {
    m = M;
    for (int i = 1; i <= m; i++) k[i] = K[i-1];
	return solve();
}
/*
4
2 4
1 2
2 3
2 3
2
2 1 3
2 1 1
1
0
*/
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |