結果
問題 | No.318 学学学学学 |
ユーザー |
👑 |
提出日時 | 2021-12-10 10:06:10 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 152 ms / 2,000 ms |
コード長 | 1,276 bytes |
コンパイル時間 | 869 ms |
コンパイル使用メモリ | 90,580 KB |
実行使用メモリ | 16,384 KB |
最終ジャッジ日時 | 2024-07-18 03:46:30 |
合計ジャッジ時間 | 4,704 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <map>using namespace std;struct d{int i;int l,r;bool operator<(d &a){return i < a.i;}};int main(){int n;cin>>n;map<int,pair<int,int>> A;vector<int> Z(n);for(int i = 0; n > i; i++){int t;cin>>t;if(!A[t].first){A[t].first = i+1;}A[t].second = i+1;Z[i] = t;}vector<int> ret[n+1],ans(n);for(auto x: A){ret[x.second.first-1].push_back(x.first);ret[x.second.second].push_back(-x.first);}priority_queue<int> C;priority_queue<int> eraser;for(int i = 0; n > i; i++){for(int j = 0; ret[i].size() > j; j++){if(ret[i][j]>0){C.push(ret[i][j]);}else if(ret[i][j] < 0){eraser.push(-1*ret[i][j]);}}//cout << C.size() << endl;while(C.size() && eraser.size() && C.top() == eraser.top()){C.pop();eraser.pop();}// cout << i << " " << C.size() << " " << eraser.size();// if(C.size())cout << " C:" << C.top();// if(eraser.size())cout << " e:" << eraser.top();// cout << endl;ans[i] = C.top();}for(int i = 0; n > i; i++){cout << max(Z[i],ans[i]);if(i+1 != n)cout << " ";}cout << endl;}