제출 #1339589

#제출 시각아이디문제언어결과실행 시간메모리
1339589iancunhaJob Scheduling (CEOI12_jobs)C++20
60 / 100
42 ms6808 KiB
#include <bits/stdc++.h>
#define int int64_t
//#pragma GCC optimize("Ofast")
#define f first
#define s second
#define opt1 ios_base::sync_with_stdio(false)
#define opt2 cin.tie(NULL)
#define optimize opt1; opt2
#define pb push_back
#define endl "\n"
#define sz(v) (int)v.size()
using namespace std;
typedef pair<int, int> ii;
typedef pair<int, ii> i3;
typedef pair<ii, ii> i4;
typedef pair<int, i4> i5;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<i3> vi3;
typedef vector<i4> vi4;
const int inf = 0x6f6f6f6f;
const int MAX = 200005;
const int LOG = 21;
const int mod = 998244353;

int BB (int low, int high, int val) {
    int mid, best = -1;
    while (low <= high) {
        mid = (low+high)/2;
        
    }
    return best;
}

ii a[MAX];

int32_t main () {
    optimize;
    //freopen("angry.in", "r", stdin);
    //freopen("angry.out", "w", stdout);    
    int n, d, m;
    cin >> n >> d >> m;
    for (int i = 1; i <= m; i++) {
        cin >> a[i].f;
        a[i].s = i;
    }
    sort(a+1, a+m+1);
    int low = 0, high = inf, mid, best = -1;
    while (low <= high) {
        mid = (low+high)/2;
        int ava = mid, wait = 0, t = 0, res = 0;
        for (int i = 1; i <= m; i++) {
            if (a[i].f > t) {
                ava += wait;
                t = a[i].f;
                wait = 0;
            }
            if (ava > 0) {
                ava--;
                wait++;
                res = max(res, t-a[i].f);
            } else {
                ava += wait;
                t++;
                wait = 0;
                ava--;
                wait++;
                res = max(res, t-a[i].f);
            }
        }
        if (res <= d) {
            best = mid;
            high = mid-1;
        } else low = mid+1;
    }
    cout << best << endl;
    int ava = best, wait = 0, t = 0;
    vector <vi> Ans;
    Ans.resize(n+1);
    for (int i = 1; i <= m; i++) {
        if (a[i].f > t) {
            ava += wait;
            t = a[i].f;
            wait = 0;
        }
        if (ava > 0) {
            ava--;
            wait++;
            Ans[t].pb(a[i].s);
        } else {
            ava += wait;
            t++;
            wait = 0;
            ava--;
            wait++;
            Ans[t].pb(a[i].s);
        }
    }
    for (int i = 1; i <= n; i++) {
        for (auto v : Ans[i])
            cout << v << " ";
        cout << "0\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...