Atcoder 的官方题解里会有伪代码?
  • 板块灌水区
  • 楼主LargeRice16pro
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/16 22:53
  • 上次更新2023/10/24 03:54:58
查看原帖
Atcoder 的官方题解里会有伪代码?
225100
LargeRice16pro楼主2023/1/16 22:53
#include <iostream>
#include <vector>
#include <atcoder/segtree>

using namespace std;

constexpr int INF = 100000000;

// Prepare a segment tree for segment max
using S = int;
int op(int a, int b) { return max(a, b); }
int e() { return -INF; }
using segtree = atcoder::segtree<S, op, e>;

void calc(const int N, const vector<int> &P, vector<int> &D) {
    // chmin(D[i], P[i] + i - max_{j < i && P[j] < P[i]} {P[j] + j}
    segtree segment_tree(N);
    for (int i = 0; i < N; ++i) {
        D[i] = min(D[i], P[i] + i - segment_tree.prod(0, P[i]));
        segment_tree.set(P[i] - 1, P[i] + i);
    }
}

int main() {

    int N;
    cin >> N;
    vector<int> P(N);
    for (auto &&p : P) cin >> p;
    vector<int> D(N, INF);

    // Handle j such that j < i and P[j] < P[i]
    calc(N, P, D);

    // j < i and P[j] > P[i]
    for (auto &&p : P) p = N + 1 - p;
    calc(N, P, D);

    // j > i and P[j] > P[i]
    reverse(begin(P), end(P));
    reverse(begin(D), end(D));
    calc(N, P, D);

    // j > i and P[j] < P[i]
    for (auto &&p : P) p = N + 1 - p;
    calc(N, P, D);

    // reverse again and print
    reverse(begin(P), end(P));
    reverse(begin(D), end(D));
    for (int i = 0; i < N; ++i) cout << D[i] << " ";
    cout << endl;

    return 0;
}

就比如上面这篇,这算是篇伪代码吧?还是我打开的方式不对?

2023/1/16 22:53
加载中...