結果
| 問題 |
No.2408 Lakes and Fish
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2024-05-02 00:43:19 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 368 ms / 2,000 ms |
| コード長 | 2,588 bytes |
| コンパイル時間 | 3,124 ms |
| コンパイル使用メモリ | 252,824 KB |
| 実行使用メモリ | 337,828 KB |
| 最終ジャッジ日時 | 2024-11-22 09:30:47 |
| 合計ジャッジ時間 | 8,351 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#define fi first
#define se second
const int MOD = 1e9+7;
#define pin pair<int,int>
#define lup(i,x) for(int i=0; i<x; i++)
#define pb push_back
#define pu push
#define vint vector<int>
#define nitro ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define din(x) int x;cin>>x;
#define endl '\n'
#define cout std::cout
const int maxn = 1e9+5;
bool ar[maxn];
vector<int> po;
int bin(int tar, int left, int right){
int l = left;
int r = right;
int mid;
int ans = -1;
while(l<=r){
mid = (l+r)/2;
if(po[mid]<tar){
l = mid+1;
}else if(po[mid] > tar){
r = mid-1;
ans = po[mid];
}
}
return ans;
}
int bin2(int tar, int left, int right){
// cout << " tar" << left << " " << right << endl;
int l = left;
int r = right;
int mid;
int ans = -1;
while(l<=r){
// cout << " "<< l <<" "<<r << endl;
mid = (l+r)/2;
if(po[mid]>tar){
r = mid-1;
}else if(po[mid] < tar){
l = mid+1;
ans = po[mid];
}
}
// cout << " "<<ans << endl;
return ans;
}
void solve(){
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++){
int a; cin >> a;
po.pb(a);
ar[a] = true;
}
sort(po.begin(), po.end());
// for(auto n : po) cout << n << " ";
int sum = 0;
for(int i = 0; i < m; i++ ){
int f, b, w;
cin >> f >> b >> w;
if(ar[f]==true){
sum += w;
}else{
int ma = 1e11;
int kanan = bin(f, 0, n-1);
if(kanan!=-1) ma = min(ma,kanan-f);
// cout << f << endl;
// cout << " kan "<< kanan << endl;
int kiri = bin2(f, 0, n-1);
// cout << " kir "<<kiri << endl;
if(kiri!=-1) ma = min(ma,f-kiri);
// cout << ma << endl;
if(ma==1e11){
sum+=b;
}else{
if(b < w-ma){
sum += w-ma;
}else{
sum += b;
}
}
}
}
cout << sum << endl;
}
signed main(){
nitro
// int n;
// cin >> n;
// while(n--){
solve();
// }
}
vjudge1