結果

問題 No.1008 Bench Craftsman
ユーザー kotamanegikotamanegi
提出日時 2020-03-06 22:29:05
言語 C++17(clang)
(17.0.6 + boost 1.83.0)
結果
AC  
実行時間 438 ms / 2,000 ms
コード長 2,704 bytes
コンパイル時間 1,946 ms
コンパイル使用メモリ 163,712 KB
実行使用メモリ 12,676 KB
最終ジャッジ日時 2024-11-30 16:52:01
合計ジャッジ時間 10,165 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 4 ms
8,064 KB
testcase_01 AC 4 ms
8,064 KB
testcase_02 AC 5 ms
8,064 KB
testcase_03 AC 4 ms
8,064 KB
testcase_04 AC 4 ms
7,936 KB
testcase_05 AC 438 ms
12,552 KB
testcase_06 AC 87 ms
10,520 KB
testcase_07 AC 5 ms
8,064 KB
testcase_08 AC 6 ms
8,320 KB
testcase_09 AC 378 ms
9,804 KB
testcase_10 AC 386 ms
12,536 KB
testcase_11 AC 382 ms
12,548 KB
testcase_12 AC 380 ms
12,668 KB
testcase_13 AC 379 ms
12,540 KB
testcase_14 AC 375 ms
12,676 KB
testcase_15 AC 254 ms
12,672 KB
testcase_16 AC 289 ms
12,544 KB
testcase_17 AC 256 ms
12,544 KB
testcase_18 AC 280 ms
12,548 KB
testcase_19 AC 281 ms
12,632 KB
testcase_20 AC 123 ms
10,104 KB
testcase_21 AC 163 ms
9,760 KB
testcase_22 AC 355 ms
10,136 KB
testcase_23 AC 381 ms
10,864 KB
testcase_24 AC 409 ms
10,568 KB
testcase_25 AC 97 ms
10,672 KB
testcase_26 AC 72 ms
9,568 KB
testcase_27 AC 313 ms
9,664 KB
testcase_28 AC 240 ms
11,184 KB
testcase_29 AC 378 ms
11,900 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:2:18: warning: '#pragma comment linker' ignored [-Wignored-pragmas]
    2 | #pragma comment (linker, "/STACK:526000000")
      |                  ^
1 warning generated.

ソースコード

diff #

#define  _CRT_SECURE_NO_WARNINGS
#pragma comment (linker, "/STACK:526000000")

#include "bits/stdc++.h"

using namespace std;
typedef string::const_iterator State;
#define eps 1e-11L
#define MAX_MOD 1000000007LL
#define GYAKU 500000004LL

#define MOD 998244353LL
#define seg_size 262144 * 4LL
#define pb push_back
#define mp make_pair
typedef long long ll;
#define REP(a,b) for(long long (a) = 0;(a) < (b);++(a))
#define ALL(x) (x).begin(),(x).end()

void init() {
    iostream::sync_with_stdio(false);
    cout << fixed << setprecision(20);
}

#define int ll
vector<int> inputs;
vector<int> mans[200000];
int n, m;
int check(int border) {
    vector<int> color;
    REP(i, n) {
        color.push_back(0);
    }
    {
        priority_queue<pair<int, int>> next;
        int cnt = 0;
        int now = 0;
        for (int q = n - 1; q >= 0; --q) {
            for (auto x : mans[q]) {
                next.push(mp(q - (x+border) / border, x % border));
                now += x + border;
                cnt++;
            }
            while (next.empty() == false&&next.top().first == q) {
                cnt--;
                now -= next.top().second;
                next.pop();
            }
            now -= cnt * border;
            color[q] += now;
        }
    }
    {
        priority_queue<pair<int, int>> next;
        int cnt = 0;
        int now = 0;
        for (int q = 1; q < n; ++q) {
            for (auto x : mans[q-1]) {
                next.push(mp(-((q-1) + (x + border ) / border), x % border));
                now += x;
                cnt++;
            }
            while (next.empty() == false&&next.top().first == -q) {
                cnt--;
                now -= next.top().second;
                next.pop();
            }
            now -= cnt * border;
            color[q] += now;
        }
    }
    REP(i, n) {
        if (inputs[i] <= color[i]) return 0;
    }
    return 1;
}
void solve() {
    cin >> n >> m;
    REP(i, n) {
        int a;
        cin >> a;
        inputs.push_back(a);
    }
    int hoge = 0;
    REP(i, m) {
        int a, b;
        cin >> a >> b;
        a--;
        mans[a].push_back(b);
        hoge += b;
    }
    //check(2);
    int ok = 1;
    REP(i, inputs.size()) {
        if (hoge >= inputs[i]) {
            ok = 0;
        }
    }
    if (ok == 1) {
        cout << 0 << endl;
        return;
    }
    int bot = 1e9;
    int top = 0;
    while (bot - top > 1) {
        int mid = (top + bot) / 2;
        if (check(mid)) {
            bot = mid;
        }
        else {
            top = mid;
        }
    }
    if (bot == 1e9) bot = -1;
    cout << bot << endl;
}

#undef int
int main() {
    init();

    solve();
}
0