CodeForces - 681C 【優(yōu)先隊列】

傳送門
優(yōu)先隊列在語法(推入,刪除)上與普通隊列一樣,不同在于聲明時要這樣:priority_queue<int,vector<int>,greater<int> >q;
優(yōu)先隊列中默認出來的top值為該隊列中的最小的數(shù).這道題就是一道模擬優(yōu)先隊列的題.(被人看來是水題,而我卻。)
代碼如下:

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=1000005;
struct node
{
    char ch;
    int x;
}op[maxn];

int main()
{
    priority_queue<int,vector<int>,greater<int> >q;//優(yōu)先隊列的嚴格聲明方式.
    int n,i,k=0,u;//默認該隊列中最小的數(shù)為優(yōu)先級最高的數(shù),即q.top=q.min.
    char s[10];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%s",s);
        if(s[0]=='i')
        {
            scanf("%d",&u);
            op[k].x=u;
            op[k++].ch='i';
            q.push(u);
        }
        else if(s[0]=='r')
        {
            if(q.empty()){//防止隊列為空時,該操作非法;
                op[k].x=0;
                op[k++].ch='i';
                q.push(0);
            }
            q.pop();
            op[k++].ch='r';
        }
        else{
            scanf("%d",&u);//u就是目標數(shù).
            if(!q.empty()&&q.top()==u)
            {
                op[k].x=u;
                op[k++].ch='g';
            }
            else if(!q.empty()&&q.top()>u)
            {
                op[k].x=u;
                op[k++].ch='i';
                q.push(u);
                op[k].x=u;
                op[k++].ch='g';
            }
            else{
                while(!q.empty()&&q.top()<u)//刪到隊列中最小的數(shù)小于目標數(shù)為止.
                {
                    op[k].x=q.top();
                    op[k++].ch='r';
                    q.pop();
                }
                if(!q.empty()&&q.top()>u || q.empty())
                {
                    op[k].x=u;
                    op[k++].ch='i';
                    q.push(u);
                }
                op[k].x=u;
                op[k++].ch='g';
            }
        }
    }
    printf("%d\n",k);//總共最少步驟
    for(int i=0;i<k;i++)
    {
        if(op[i].ch=='i')
            printf("insert %d\n",op[i].x);
        else if(op[i].ch=='r')
            printf("removeMin\n");
        else
            printf("getMin %d\n",op[i].x);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • GCD調度隊列是執(zhí)行任務的強大工具。調度隊列允許您相對于調度者異步或者同步的執(zhí)行任意代碼塊。您能夠使用調度隊列來執(zhí)...
    坤坤同學閱讀 6,746評論 1 3
  • 容器的概念所謂STL容器,即是將最常運用的一些數(shù)據(jù)結構(data structures)實現(xiàn)出來。容器是指容納特定...
    飯飯H閱讀 440評論 0 0
  • 上一篇優(yōu)先隊列實現(xiàn)講述如何使用最大堆來自己實現(xiàn)一個優(yōu)先隊列,實際上STL里面也為我們提供了相關的實現(xiàn)。下面具體來看...
    litexy閱讀 2,460評論 0 0
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,912評論 0 33

友情鏈接更多精彩內容