cf D. Shurikens

考试周,好久没刷题了
最近,kuangbin的题单暂时 松一松 。大概松半个月左右。
cf上分要抓紧了。

这题我没看出来,我是有思路的。
我们注意到,对于一个操作:- num1
如果他的前面有- nun2
若num2>num1
则在num2后面,num1应该放置。
num1是绝对不可以放在num2前面的。且- num1这个操作实行前一定要放置num1

根据这个信息我们想想到底应该怎么放置
就近放置 优先队列存储pos
遇到一个+就存上一个++pos
遇到一个- 就在顶部的pos处放置

我们想想,我在最大 的pos处放置,能够最大限度地避免自己被放在前面比我大num前
那问题来了,值会对后面的数无影响吗?
如果正好我后面的数小于我,那么很明显至今为止地所有pos都不能放,
一放就完蛋。
只能放我后面的-和我地-中间夹杂的+
还有所以我就算放在至今最靠后的pos上也是无关紧要的。
如果后面的比我大那就更没必要了就放在我前面还是放在我后面,完全没影响。

那如果,我的后驱比我大但是比我前面的小呢 ?
我们放在最后面的pos还是最有操作。
因为,如果上面的假设成立。那么我也一定比前面的小。
那么我放在最后面,自然而然也不会有什么问题。

说的很迷,构造题真难!!!!

#include<iostream>
#include<vector>
#include<functional>
#include<queue>
using namespace std;
typedef pair<char, int> pci;
const int max_n = 1e5 + 100;
pci ops[max_n << 1];
int ans[max_n];
int main() {
    ios::sync_with_stdio(0);
    int n;cin >> n;
    for (int i = 1;i <= 2 * n;++i) {
        cin >> ops[i].first;
        if (ops[i].first == '-')
            cin >> ops[i].second;
    }priority_queue<int> que;
    int pos = 0;
    for (int i = 1;i <= 2 * n;++i) {
        if (ops[i].first == '+')que.push(++pos);
        else {
            if (que.empty()) {
                cout << "NO\n";
                return 0;
            }int pp = que.top();
            que.pop();
            ans[pp] = ops[i].second;
        }
    }priority_queue<int,vector<int>,greater<int>> set;int ii = 1;
    for (int i = 1;i <= 2 * n;++i) {
        if (ops[i].first == '+')
            set.push(ans[ii++]);
        else {
            int num = set.top();
            set.pop();
            if (num != ops[i].second) {
                cout << "NO\n";
                return 0;
            }
        }
    }cout << "YES\n";
    for (int i = 1;i <= n;++i)
        cout << ans[i] << " ";
    cout << endl;
}
全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务