HDU--5349--2015 Multi-University Training Contest 5--MZL's simple problem

MZL's simple problem

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 595    Accepted Submission(s): 294


Problem Description

 

A simple problem
Problem Description
You have a multiple set,and now there are three kinds of operations:
1 x : add number x to set
2 : delete the minimum number (if the set is empty now,then ignore it)
3 : query the maximum number (if the set is empty now,the answer is 0)
 


 

Input

 

The first line contains a number   N  ( N106 ),representing the number of operations.
Next   N  line ,each line contains one or two numbers,describe one operation.
The number in this set is not greater than   109 .
 


 

Output

 

For each operation 3,output a line representing the answer.
 


 

Sample Input

 

  
  
6 1 2 1 3 3 1 3 1 4 3
 


 

Sample Output

 

  
  
3 4
 


 

Source

 


题意:n个查询,每个查询首先是一个K确定操作,K=1表示向数组插入一个X(X在K后面输入),K=2表示删除数组中最小值,K=3表示查询数组中的最大值

PS:这里的操作只需要记录最大值和数组中元素的个数,删除操作就是元素个数减一,插入操作就是元素个数加一同时与最大值比较然后记录更大值

PS:有一点很重要,就是当删除完毕之后,最大值要初始化,不然下次插入又会把先前的拿来比较~~

、、、当然,比赛时我第一眼想到的竟然是线段树~

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Max(a,b) (a>b?a:b)
#define Min(a,b) (a<b?a:b)
#define LL long long
using namespace std;
int main()
{
    LL t,n,m,i,j,k,l,num,Nmax;
    while(scanf("%lld",&n)!=EOF)
    {
        num=0;
        Nmax=-9999999999;
        while(n--&&scanf("%lld",&k))
        {
            if(k==3)
            {
                if(num>0)printf("%lld\n",Nmax);
                else puts("0");
            }
            else if(k==1)
            {
                scanf("%lld",&l);
                num++;
                Nmax=Max(Nmax,l);//记录更大值
            }else
            {
                if(num>0)num--;
                if(num==0)Nmax=-9999999999;//初始化最大值
            }
        }
    }
    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值