Submission #1271692

#TimeUsernameProblemLanguageResultExecution timeMemory
1271692vtnooTeams (IOI15_teams)C++20
0 / 100
4094 ms10488 KiB
#ifndef teams_h
#define teams_h
#include <bits/stdc++.h>
using namespace std;

const int MAXN=500005;
int N, A[MAXN], B[MAXN];

void init(int n, int a[], int b[]) {
    N=n;
	for(int i=0;i<N;i++){
		A[i]=a[i];
		B[i]=b[i];
	}
}

int can(int M, int K[]) {
	vector<int> v(N);
    for(int i=0;i<N;i++){
        v[i]=i;
    }
	sort(v.begin(), v.end(), [&](int f, int s){
        if(B[f]==B[s]){
            return A[f]<A[s];
        }
        return B[f]<B[s];
    });
    sort(K, K+M);
    int j=0;
    multiset<pair<int,int>> s;
    for(int i=0;i<M;i++){
        while(j<N&&A[v[j]]<=K[i]){
            s.insert(make_pair(B[v[j]], A[v[j]]));
            j++;
        }
        auto it=s.lower_bound({K[i], 0});
        int cnt=0;
        while(it!=s.end()&&cnt<K[i]){
            cnt++;
            it=s.erase(it);
        }
        /* cout<<"=============="<<endl;
        cout<<i<<endl;
        cout<<cnt<<endl;
        cout<<s.size()<<endl;
        cout<<j<<endl; */
        if(cnt!=K[i])return false;
    }
    return true;
}
#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...