結果
| 問題 |
No.1008 Bench Craftsman
|
| コンテスト | |
| ユーザー |
totori_nyaa
|
| 提出日時 | 2020-03-07 00:38:58 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,499 bytes |
| コンパイル時間 | 2,088 ms |
| コンパイル使用メモリ | 179,672 KB |
| 実行使用メモリ | 7,564 KB |
| 最終ジャッジ日時 | 2024-10-14 10:54:47 |
| 合計ジャッジ時間 | 8,931 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 9 WA * 18 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long long monyafuunyapusuppokohonyaaonnii;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout << fixed << setprecision(20);
monyafuunyapusuppokohonyaaonnii n,m;
cin>>n>>m;
monyafuunyapusuppokohonyaaonnii a[n];
for(monyafuunyapusuppokohonyaaonnii i=0;i<n;i++) cin>>a[i];
array<monyafuunyapusuppokohonyaaonnii,2> x[n];
for(monyafuunyapusuppokohonyaaonnii i=0;i<m;i++){
monyafuunyapusuppokohonyaaonnii t,h;
cin>>t>>h;
t--;
if(a[t] <= h){
cout << -1 << endl;
return 0;
}
x[i] = {t,h};
}
sort(x,x+m);
monyafuunyapusuppokohonyaaonnii low = -1,up=1e9+10;
while(up-low>1){
monyafuunyapusuppokohonyaaonnii mid = (up+low)/2;
priority_queue<monyafuunyapusuppokohonyaaonnii> la;
priority_queue<monyafuunyapusuppokohonyaaonnii,vector<monyafuunyapusuppokohonyaaonnii>,greater<monyafuunyapusuppokohonyaaonnii>> sm;
monyafuunyapusuppokohonyaaonnii sum = 0;
monyafuunyapusuppokohonyaaonnii inc = 0;
for(monyafuunyapusuppokohonyaaonnii i=0;i<m;i++){
monyafuunyapusuppokohonyaaonnii ret = x[i][1] - x[i][0]*mid;
if(ret>=0){
sum += ret;
inc++;
}
else{
la.push(ret);
}
}
monyafuunyapusuppokohonyaaonnii now = 0;
bool pos = true;
monyafuunyapusuppokohonyaaonnii dec = 0;
for(monyafuunyapusuppokohonyaaonnii i=0;i<n;i++){
if(sum >= a[i]){
pos = false;
break;
}
while(now<m && i == x[now][0]){
sm.push(x[now][1] + i*mid);
dec++;
now++;
inc--;
}
sum += (inc-dec)*mid;
while(la.size() && la.top() >= -(i+1)*mid){
inc++;
monyafuunyapusuppokohonyaaonnii p = la.top();
la.pop();
sum += p+(i+1)*mid;
}
while(sm.size() && sm.top() <= (i+1)*mid){
dec--;
monyafuunyapusuppokohonyaaonnii p = sm.top();
sm.pop();
sum -= p-i*mid;
}
}
//cerr << mid << endl;
if(pos){
up = mid;
}
else low = mid;
}
cout << up << endl;
}
totori_nyaa