日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU_5249(百度之星D题)

發布時間:2023/12/18 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU_5249(百度之星D题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為之前沒寫過平衡樹的題,所以很自然地只會用set來寫。。。然后,很蠢地想直接找set容器中間位置的那個值,結果iterator沒有重載+唉。。。翻了一下AC的代碼(果然有跟我一樣用set來寫的),然后發現是兩個set容器解決了這個問題。。。其實很容易想到,一個set容器放前一半的數,一個set容器放后一半的數,就行了。。。

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <cstdlib> #include <set> #include <queue> #define FOR(i,x,y) for(int i = x;i < y;i ++) #define IFOR(i,x,y) for(int i = x;i > y;i --)using namespace std;int n;int main() {//freopen("test.in","r",stdin);int tCase = 0;while(~scanf("%d",&n)){printf("Case #%d:\n",++tCase);int num;queue <int> s;set <int> p,q;char str[10];while(n--){getchar();scanf("%s",str);if(str[0] == 'q'){printf("%d\n",*(q.begin()));}else if(str[0] == 'i'){scanf("%d",&num);s.push(num);if(q.empty() || num < *(q.begin())){p.insert(num);}elseq.insert(num);}else{int v = s.front(); s.pop();if(p.find(v) != p.end()){p.erase(v);}elseq.erase(v);}while(p.size() > q.size()){set <int> :: iterator it = p.end();it--;int v = *it;p.erase(it);q.insert(v);}while(q.size() > p.size()+1){set <int> :: iterator it = q.begin();int v = *it;p.insert(v);q.erase(it);}}}return 0; }

轉載于:https://www.cnblogs.com/hqwhqwhq/p/4555869.html

總結

以上是生活随笔為你收集整理的HDU_5249(百度之星D题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。