結果
問題 | No.1008 Bench Craftsman |
ユーザー | milanis48663220 |
提出日時 | 2021-05-26 22:02:40 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,822 bytes |
コンパイル時間 | 1,267 ms |
コンパイル使用メモリ | 120,452 KB |
実行使用メモリ | 6,912 KB |
最終ジャッジ日時 | 2024-10-15 15:58:55 |
合計ジャッジ時間 | 8,687 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,820 KB |
testcase_01 | AC | 2 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,816 KB |
testcase_03 | AC | 2 ms
6,816 KB |
testcase_04 | RE | - |
testcase_05 | RE | - |
testcase_06 | AC | 83 ms
6,816 KB |
testcase_07 | AC | 2 ms
6,820 KB |
testcase_08 | AC | 4 ms
6,816 KB |
testcase_09 | AC | 48 ms
6,820 KB |
testcase_10 | RE | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | AC | 31 ms
6,816 KB |
testcase_16 | RE | - |
testcase_17 | AC | 31 ms
6,816 KB |
testcase_18 | AC | 137 ms
6,820 KB |
testcase_19 | AC | 145 ms
6,816 KB |
testcase_20 | RE | - |
testcase_21 | RE | - |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
testcase_25 | RE | - |
testcase_26 | RE | - |
testcase_27 | RE | - |
testcase_28 | RE | - |
testcase_29 | RE | - |
ソースコード
#include <iostream> #include <algorithm> #include <iomanip> #include <vector> #include <queue> #include <set> #include <map> #include <tuple> #include <cmath> #include <numeric> #include <functional> #include <cassert> #define debug_value(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << #x << "=" << x << endl; #define debug(x) cerr << "line" << __LINE__ << ":<" << __func__ << ">:" << x << endl; template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } using namespace std; typedef long long ll; int n, m; ll a[100005]; int x[100005]; ll w[100005]; void input(){ cin >> n >> m; for(int i = 0; i < n; i++){ cin >> a[i]; } for(int i = 0; i < m; i++){ cin >> x[i] >> w[i]; x[i]--; } } const ll INF = 1e18; bool judge(ll c){ if(c == 0){ ll w_sum = 0; for(int i = 0; i < m; i++) w_sum += w[i]; for(int i = 0; i < n; i++) { if(a[i] <= w_sum) return false; } return true; } vector<ll> d_load(n+1), load(n+1); auto add_d_load = [&](int l, int r, ll d){ // cout << l << ' ' << r << ' ' << d << endl; chmin(r, n); d_load[l] += d; d_load[r] -= d; }; auto add_val = [&](int i, ll x){ if(i == 0){ load[0] += x; d_load[0] -= x; d_load[1] += x; }else{ d_load[i-1] += x; d_load[i] -= 2*x; d_load[i+1] += x; } }; for(int j = 0; j < m; j++){ if(w[j] < c){ // cout << 'H' << ' ' << x[j] << ' ' << w[j] << endl; add_val(x[j], w[j]); continue; } int l = x[j]-w[j]/c; if(l <= 0){ // add_val(0, w[j]%c-c*l); load[0] += w[j]%c-c*l; l = 0; }else{ add_d_load(l-1, l, w[j]%c); } add_d_load(x[j]+w[j]/c, x[j]+w[j]/c+1, -(w[j]%c)); // cout << l << ' ' << w[j] << endl; add_d_load(l, x[j], c); add_d_load(x[j], x[j]+w[j]/c, -c); } for(int i = 0; i < n; i++) d_load[i+1] += d_load[i]; for(int i = 0; i < n; i++) load[i+1] += load[i]+d_load[i]; for(int i = 0; i < n; i++){ if(load[i] >= a[i]) return false; } return true; } void solve(){ if(judge(0)){ cout << 0 << endl; return; }else if(!judge(INF)){ cout << -1 << endl; return; } ll l = 0, r = INF; while(r-l > 1){ ll c = (l+r)/2; if(judge(c)) r = c; else l = c; } cout << r << endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << setprecision(10) << fixed; input(); solve(); }