結果
| 問題 |
No.3017 交互浴
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-01-25 13:47:44 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 379 ms / 2,000 ms |
| コード長 | 1,877 bytes |
| コンパイル時間 | 4,086 ms |
| コンパイル使用メモリ | 253,620 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2025-01-25 22:59:48 |
| 合計ジャッジ時間 | 27,669 ms |
|
ジャッジサーバーID (参考情報) |
judge9 / judge10 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 55 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
template <typename T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template <typename T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
int main() {
int N;
cin >> N;
stack<pair<int,int>> sta;
sta.push({0,1000000001});
long long res = 0;
rep(i,N){
int h;
cin >> h;
int index = 1;
if(i % 2 == 0){
int index = 0;
}
while(true){
auto p = sta.top();
if(p.second < h){
if(index % 2){
if(i % 2 == 0){
res += p.second - p.first;
}else{
res -= p.second - p.first;
}
}
sta.pop();
index++;
}else{
// cout << index <<" " <<i <<endl;
if(index % 2 ==0){
int temp = p.second;
sta.pop();
sta.push({0,p.second});
}else{
int temp = p.second;
if(i % 2 == 0){
res += h - p.first;
}else{
res -= h - p.first;
}
sta.pop();
sta.push({h,p.second});
sta.push({0,h});
}
break;
}
}
// auto temp2 = sta;
// while(!temp2.empty()){
// auto j = temp2.top();
// temp2.pop();
// cout << "{"<<j.first <<" " << j.second << "}";
// }
cout << res << endl;
}
}