제출 #1370016

#제출 시각아이디문제언어결과실행 시간메모리
1370016Charizard2021Stone Arranging 2 (JOI23_ho_t1)C++20
25 / 100
2096 ms1448 KiB
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
struct Node{
    int set, sum, L, R;
    void push(Node& left, Node& right){
        int mid = (L + R)/2;
        if(set != 0){
            left.set = set;
            right.set = set;
            left.sum = set * (mid - L + 1);
            right.sum = set * (R - mid);
            set = 0;
        }
    }
    void merge(Node& left, Node& right){
        sum = left.sum + right.sum;
    }
};
vector<Node> segtree;
void build(int idx, int L, int R){
    if(L == R){
        segtree[idx].sum = a[L];
        segtree[idx].L = L;
        segtree[idx].R = R;
        segtree[idx].set = 0;
        return;
    }
    int mid = (L + R)/2;
    segtree[idx].set = 0;
    build(2 * idx, L, mid);
    build(2 * idx + 1, mid + 1, R);
    segtree[idx].L = segtree[2 * idx].L;
    segtree[idx].R = segtree[2 * idx + 1].R;
    segtree[idx].merge(segtree[2 * idx], segtree[2 * idx + 1]);
}
int query(int idx, int L, int R, int qL, int qR, int val, int type){
    if(qR < L || R < qL){
        return 0;
    }
    if(qL <= L && R <= qR){
        if(type == 0){
            return segtree[idx].sum;
        }
        else{
            segtree[idx].set = val;
            segtree[idx].sum = val * (R - L + 1);
        }
    }
    int mid = (L + R)/2;
    segtree[idx].push(segtree[2 * idx], segtree[2 * idx + 1]);
    int left = query(2 * idx, L, mid, qL, qR, val, type);
    int right = query(2 * idx + 1, mid + 1, R, qL, qR, val, type);
    if(type == 0){
        return left + right;
    }
    else{
        segtree[idx].merge(segtree[2 * idx], segtree[2 * idx + 1]);
        return 0;
    }
}
int main(){
    int n;
    cin >> n;
    a.resize(1 + n);
    // segtree.resize(4 + 4 * n);
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    // build(1, 1, n);
    for(int i = 1; i <= n; i++){
        int idx = -1;
        for(int j = i - 1; j >= 0; j--){
            if(a[i] == a[j]){
                idx = j;
                break;
            }
        }
        if(idx != -1){
            for(int k = i - 1; k > idx; k--){
                a[k] = a[i];
            }
        }
    }
    for(int i = 1; i <= n; i++){
        cout << a[i] << "\n";
        // cout << query(1, 1, n, i, i, 0, 0) << "\n";
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…