QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#715436#8837. Increasing IncomeIllusionaryWhiteTravelerRE 0ms0kbC++201.4kb2024-11-06 12:05:272024-11-06 12:05:27

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 12:05:27]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-11-06 12:05:27]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 200000 + 5;

int N, M, p[MAX_N], q[MAX_N], f[MAX_N], pre[MAX_N];

void solve() {
    M = 0;
    cin >> N;
    for (int i = 1; i <= N; i ++) {
        cin >> p[i]; q[p[i]] = i;
        int pos = lower_bound(f + 1, f + M + 1, p[i]) - f;
        if (M < pos) M = pos;
        f[pos] = p[i];
        pre[i] = q[f[pos - 1]];
    }
    vector <int> keypos(0), ans(0);
    for (int i = q[f[M]]; i; i = pre[i]) keypos.emplace_back(i);
    assert((int)keypos.size() == M);
    reverse(keypos.begin(), keypos.end());
    priority_queue <pair <int, int>> pq;
    for (int i = 1, j = 0, k = keypos[0]; i <= N; i ++) {
        if (j < (int)keypos.size() && keypos[j] == i) {
            ans.emplace_back(i); k = keypos[++ j];
            while (!pq.empty() && (j == (int)keypos.size() || keypos[j] + pq.top().first > 0)) {
                ans.emplace_back(pq.top().second); pq.pop();
            }
        }else {
            if (p[i] < k) {
                ans.emplace_back(i);
            }else {
                pq.push(pair(-p[i], i));
            }
        }
    }
    assert((int)ans.size() == N);
    for (int i = 0; i < N; i ++) {
        cout << ans[i] << "\n "[i != N - 1];
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    int T = 1;
    cin >> T;
    while (T --) solve();
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

3
3
1 2 3
4
2 4 3 1
5
1 5 2 4 3

output:


result: