#include "teams.h"
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
int n;
vector<pii> arr;
void init(int N, int A[], int B[]) {
	n = N;
	arr.resize(n);
	for(int i = 0; i < n; i++){
		arr[i] = {A[i], B[i]};
	}
}
bool doMatch(int v, vector<int>& from, vector<vector<int>>& adj, vector<bool>& vis){
	if(vis[v]) return false;
	vis[v] = true;
	for(auto u : adj[v]){  
		if(from[u] == -1 || doMatch(from[u],from,adj,vis)){
			from[u] = v;
			return true;
		}
	} 
	return false;
}
int can(int m, int sizes[]) {
	vector<int> K(m);
	for(int i = 0; i < m; i++){
		K[i] = sizes[i];
	}
	int s = 0;
	for(int i = 0; i < m; i++){
		s += K[i];
	}
	if(s > n){
		return false;
	}
	vector<vector<int>> adj(n);
	int pt = 0;
	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			if(arr[j].first <= K[i] && K[i] <= arr[j].second){
				for(int k = 0; k < K[i]; k++){ 
					adj[j].push_back(pt+k);
				}
			} 
		}
		pt += K[i];
	}
	vector<bool> vis(n);
	vector<bool> matched(n);
	vector<int> from(s, -1); 
	for(int i = 0; i < n; i++){
		for(auto u : adj[i]){
			if(from[u] == -1){
				from[u] = i;
				matched[i] = true;
				break;
			}
		}
	}
	for(int i = 0; i < n; i++){
		if(matched[i]) continue;
		fill(vis.begin(),vis.end(),0);
		doMatch(i,from, adj,vis);
	}
	for(int i = 0; i < s; i++){
		if(from[i] == -1){
			return false;
		}
	}
	return true;
}
| # | 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... |