HDU_5249(百度之星D题)
生活随笔
收集整理的這篇文章主要介紹了
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题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node.js小技巧——使用 super
- 下一篇: 在云服务器上注意GeoServer和Sh