데이터 구조 multiset hdu - 2275 - Kiki & Little Kiki 1

2014 단어 데이터 구조
제목 링크:
http://acm.hdu.edu.cn/showproblem.php?pid=2275
제목:
두 가지 조작 이 있 습 니 다.
1. push a 는 a 를 배열 에 넣 습 니 다.
2. pop a 출력 은 a 의 최대 수 를 초과 하지 않 고 제거 합 니 다.
문제 풀이 방향:
멀 티 세트 로 넘 어 갈 수 있어 요.
조작 2 에 대해 서 는 용기 안에 이 숫자 가 있 는 지 없 는 지 를 먼저 판단 하고 있 으 면 직접 출력 한다.없 으 면 a 를 용기 에 넣 고 a 의 위 치 를 찾 습 니 다. - 이전 위 치 를 얻 고 마지막 으로 두 개의 교체 기 를 삭제 합 니 다.
코드:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
char ki[10];
multiset<int>mys;

int main()
{
   int n,d;
   multiset<int>::iterator it1,it;

   while(scanf("%d",&n)!=EOF)
   {
      mys.clear();
      for(int i=1;i<=n;i++)
      {
         scanf("%s%d",ki,&d);
         if(ki[1]=='u')
            mys.insert(d);
         else
         {
            if(mys.empty()||d<*mys.begin())
            {
               printf("No Element!
"); continue; } it=mys.find(d); if(it!=mys.end()) // , { printf("%d
",d); mys.erase(it); continue; } mys.insert(d); // d d , -- , d it=it1=mys.find(d); printf("%d
",*(--it)); mys.erase(it); // mys.erase(it1); } } puts(""); } return 0; }

좋은 웹페이지 즐겨찾기