HDU 1908 Double Queue
2013-09-30 23:37
423 查看
如题所示,考察的是双端队列。
题目很变态,题意要自己猜。
就是code为2的时候输出p最大的对应的k,code为3时输入p最小的对应的k。
查询的时候同时删除所查询的元素。
所以可以以<p,k>为键值,建立map<int,int> client,map会自动以p为基准进行升序排序。
用不来STL的童鞋自己去敲数组吧。
HDU 1908
题目很变态,题意要自己猜。
就是code为2的时候输出p最大的对应的k,code为3时输入p最小的对应的k。
查询的时候同时删除所查询的元素。
所以可以以<p,k>为键值,建立map<int,int> client,map会自动以p为基准进行升序排序。
用不来STL的童鞋自己去敲数组吧。
#include<stdio.h> #include<iostream> using namespace std; #include<stdlib.h> #include<math.h> #include<string.h> #include<queue> #include<map> #include<vector> #include<set> #include<string> #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) ) #define repAE(p,q,i) for( int (i)=(p); (i)<=(q); ++(i) ) #define repD(p,q,i) for( int (i)=(p); (i)!=(q); --(i) ) #define repDE(p,q,i) for( int (i)=(p); (i)>=(q); --(i) ) #define swap(a,b) { int temp=(a) ; (a)=(b); (b)=temp; } #define ll long long int main() { int code,k,p; map<int,int> client; while( scanf("%d",&code) != EOF ) { if(code == 0) break; else if(code == 1) { scanf("%d%d",&k,&p); client[p] = k ; } else if(code == 2) { if( !client.empty() ) { printf("%d\n",( *client.rbegin() ).second); client.erase( client.find( (*client.rbegin() ).first) ); } else printf("0\n"); } else if(code == 3) { if( !client.empty() ) { printf("%d\n",( *client.begin() ).second); client.erase( client.begin() ); } else printf("0\n"); } } return 0; }
HDU 1908
相关文章推荐
- hdu 1908 Double Queue (map)
- HDU 1908 Double Queue
- HDU 1908 Double Queue(set)
- POJ 3481 & HDU 1908 Double Queue (map运用)
- hdu 1908 Double Queue (map)
- HDU - 1908——Double Queue
- POJ 3481 & HDU 1908 Double Queue (map运用)
- HDU 1908 Double Queue(set)
- HDU--1908Double Queue【STL--map】
- HDU 1908 Double Queue
- HDU-1908-Double Queue
- hdu 1908 double queues
- hdu 1908数据结构水题
- HDOJ 题目1908Double Queue(STL)
- 【HDOJ】1908 Double Queue
- hdu_1908_map知识补全_银行排队问题
- hdu 1908
- hdu 1908 : Double Queue
- acm hdu 1908 Double Queue
- HDU-1316 How Many Fibs? Java