std::list 80分 TLE 还有救吗
查看原帖
std::list 80分 TLE 还有救吗
555784
KandaSorata楼主2022/10/27 08:04
#include <bits/stdc++.h>
using namespace std;

struct block {
    int prefix, kind, num;

    block(int a, int b, int c) : prefix(a), kind(b), num(c) {}

    block() : prefix(), kind(), num() {}

    int get() {
        if (num) {
            num--;
            return prefix++;
        } else {
            return -1;
        }
    }

    bool empty() {
        return !num;
    }

    void add() {
        num++;
    }
};

std::list<block> l;

int main() {
    int n, x;
    scanf("%d", &n);
    for (int i = 1;i <= n;i++) {
        scanf("%d", &x);
        if (l.empty()) {
            l.push_back({i, x, 1});
        } else {
            if (l.back().kind == x) {
                l.back().add();
            } else {
                l.push_back({i, x, 1});
            }
        }
    }

    while (!l.empty()) {
        int back = -1;
        for (auto it = l.begin(); it != l.end(); ) {
            if (back != -1 and it->kind == back) {
                it++;
                continue;
            }
            printf("%d ", it->get());
            back = it->kind;
            if (it->empty()) {
                it = l.erase(it);
            } else {
                it++;
            }
        }
        printf("\n");
    }
    return 0;
}

record

2022/10/27 08:04
加载中...