結果
| 問題 |
No.318 学学学学学
|
| コンテスト | |
| ユーザー |
どらら
|
| 提出日時 | 2017-06-27 19:59:28 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 174 ms / 2,000 ms |
| コード長 | 1,878 bytes |
| コンパイル時間 | 2,025 ms |
| コンパイル使用メモリ | 180,944 KB |
| 実行使用メモリ | 16,588 KB |
| 最終ジャッジ日時 | 2024-06-22 18:16:58 |
| 合計ジャッジ時間 | 5,704 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)
#define rep(i,n) REP(i,0,n)
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define ALLOF(c) (c).begin(), (c).end()
typedef long long ll;
typedef unsigned long long ull;
class LazySegmentTree {
const int NONE = INT_MAX;
int N;
vector<int> lazy, dat;
void setLazy(int k, int v){
lazy[k] = v;
dat[k] = v;
}
void push(int k){
if(lazy[k] == NONE) return;
setLazy(2*k+1, lazy[k]);
setLazy(2*k+2, lazy[k]);
lazy[k] = NONE;
}
public:
LazySegmentTree(int n){
N = 1;
while(N<n) N *= 2;
dat.resize(2*N);
lazy.resize(2*N);
for(int i=0; i<2*N; i++){
dat[i] = INT_MIN;
lazy[i] = NONE;
}
}
void update(int s, int t, int val){ update(s, t, val, 0, 0, N); }
void update(int s, int t, int val, int k, int l, int r){
if(r<=s || t<=l) return;
if(s<=l && r<=t){
setLazy(k, val);
return;
}
push(k);
update(s, t, val, 2*k+1, l, (l+r)/2);
update(s, t, val, 2*k+2, (l+r)/2, r);
}
int query(int s, int t){ return query(s, t, 0, 0, N); }
int query(int s, int t, int k, int l, int r){
if(r<=s || t<=l) return INT_MIN;
if(s<=l && r<=t) return dat[k];
push(k);
int vl = query(s, t, 2*k+1, l, (l+r)/2);
int vr = query(s, t, 2*k+2, (l+r)/2, r);
return max(vl, vr);
}
};
int main(){
int N;
cin >> N;
vector<int> v;
rep(i,N){
int a;
cin >> a;
v.push_back(a);
}
map<int,vector<int>> memo;
rep(i,N){
memo[v[i]].push_back(i);
}
LazySegmentTree lst(N);
FOR(it,memo){
int l = (it->second)[0];
int r = (it->second)[(it->second).size()-1];
lst.update(l,r+1,it->first);
}
rep(i,N){
if(i>0) cout << " ";
cout << lst.query(i,i+1);
}
cout << endl;
return 0;
}
どらら