結果
問題 | No.3017 交互浴 |
ユーザー |
![]() |
提出日時 | 2025-01-25 13:42:15 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 461 ms / 2,000 ms |
コード長 | 1,020 bytes |
コンパイル時間 | 1,832 ms |
コンパイル使用メモリ | 171,548 KB |
実行使用メモリ | 12,800 KB |
最終ジャッジ日時 | 2025-01-25 22:57:03 |
合計ジャッジ時間 | 27,442 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 55 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) typedef vector<int> VI; typedef vector<VI> VVI; typedef vector<long long> VL; typedef vector<VL> VVL; typedef long long LL; #define all(a) (a).begin(), (a).end() #define Yes(n) cout << ((n) ? "Yes" : "No" ) << endl #define ALL(a) (a).begin(),(a).end() #define pb push_back int main() { int n;cin>>n; set<VI> D; int maxx=2000000000; D.insert({maxx,1}); int ans=0; rep(i,n){ int h;cin>>h; auto it=D.begin(); VVI er; int a=0; while(1){ int ii=(*it)[0]; if(ii>h){ if((*it)[1]==0){ans-=h-a;} break; } if((*it)[1]==0){ans-=(ii-a);} a=ii; er.pb(*it); it++; } if(i%2==0){ans+=h;} //else{ans=max(0,ans-h);} for(VI z : er){D.erase(z);} D.insert({h,i%2}); cout<<ans<<endl; } /*while(1){ int ii=(*it)[0],b=(*it)[1]; if(ii==maxx){break;} if(b==0){ans+=ii-a;} it++; a=ii; } cout<<ans<<endl;*/ }