Submission #518489

#TimeUsernameProblemLanguageResultExecution timeMemory
518489PiejanVDCTeams (IOI15_teams)C++17
0 / 100
4048 ms20316 KiB
#include<bits/stdc++.h>
#include "teams.h"
using namespace std;
 
vector<int>sum;
vector<int>rem;
 
vector<int>a,b;
 
void init(int N, int A[], int B[]) {
    sum.resize(N+5,0);
    rem.resize(N+5,0);
    for(int i = 0 ; i < N ; i++)
        sum[A[i]]++,sum[B[i]+1]--,a.push_back(A[i]),b.push_back(B[i]);
    for(int i = 1 ; i <= N ; i++)
        sum[i] += sum[i-1];
}
 
int r(int le, int ri) {
    le++;
    int ret = 0;
    for(int i = 0 ; i < (int)a.size() ; i++) {
        if(a[i] <= le && b[i] < ri)
            ret++;
    }
    return ret;
}
 
int can(int m, int k[]) {
    bool ok = 1;
    vector<pair<int,int>>v;
    sort(k,k+m);
    int cnt = 0, val = -1;
    for(int i = 0 ; i < m ; i++) {
        if(k[i] != val) {
            if(val != -1)
                v.push_back({val,cnt});
            cnt = 1;
            val = k[i];
            continue;
        }
        cnt++;
    }
    v.push_back({val,cnt});
    m = (int)v.size();
    cnt = 0; int prev = 0;
    for(int i = 0 ; i < m ; i++) {
        int z = v[i].first;
        int am = sum[z] - sum[prev];
        int removed = r(prev,z);
        //cout << z << " " << am << " " << removed << "\n";
        cnt = max(0,(cnt - (removed)));
        am -= cnt;
        if(am < z*v[i].second) {
            ok = 0;
            break;
        }sum[z] += z*v[i].second - am;
        cnt += z*v[i].second;
        prev = z-1;
    }return ok;}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...