バイトの競プロメモ

主に競技プログラミング

E - Frequency AtCoder Regular Contest 069

E - Frequency

最大の石を減らすには、石の数×高さの回数が必要になる
この操作をシミュレートする
自分と同じ高さの場所の数と二番目に高い物の位置が必要になる
pairに(石の高さ,インデックス)を持たせて降昇順にソートすると石の数と最小のインデックスがわかりやすい

Submission #4183499 - AtCoder Regular Contest 069

vi a, b, c;
vp p;

signed main() {
    cin >> n;
    addn(a, n);
    rep(i, n)p.eb(-a[i], i);
    p.eb(0ll, n);
    sort(p);
    int pi = 0;
    int ai = p[pi].se;
    vi res(k5);
    while (1) {
        int nh = -p[pi].first;
        int ti = lowerIndex(p, mp(p[pi].first, inf));
        int th = -p[ti].fi;
        res[ai] += (nh - th) * ti;
        pi = ti;
        chmin(ai, p[pi].se);
        if (ti == n)break;
    }
    rep(i, n)cout << res[i] << endl;
    return 0;
}