Submission #434354

#TimeUsernameProblemLanguageResultExecution timeMemory
434354qwerasdfzxclTeams (IOI15_teams)C++14
34 / 100
4054 ms36808 KiB
#include "teams.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
pair<int, int> a[500500];
int n;

bool cmp(pair<int, int> &x, pair<int, int> &y){
    if (x.second==y.second) return x.first<y.first;
    return x.second>y.second;
}

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

int can(int M, int K[]) {
    int S = 0;
    for (int i=0;i<M;i++) S += K[i];
    if (S>n) return 0;
    sort(K, K+M, greater<int>());
    multiset<int> st;
    int pt = 0;
    for (int i=0;i<M;i++){
        for (;pt<n;pt++){
            if (a[pt].second<K[i]) break;
            st.insert(a[pt].first);
        }
        auto iter = st.upper_bound(K[i]);
        auto iter2 = iter;
        int cnt = 0;
        while(cnt<K[i] && iter2!=st.begin()){
            --iter2; cnt++;
        }
        if (cnt<K[i]) return 0;
        st.erase(iter2, iter);
    }
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...