模板库应用2-模板题1 TLE求助(已解决)

时间限制: 1000ms

空间限制: 524288kB

题目描述

有两种操作:

  1. 往序列中加入一个数,
  2. 输出这个序列中最大的数,并删除它。

不保证所有数不相同,不保证2操作时序列一定有数。

输入描述

输入一个n,表示接下来有n种操作,

接下来n行每行第一个数op,

若op=1,则之后再跟一个数x,表示你要将x加入序列,

若op=2,则你需要输出当前序列中最大的数并将它从序列中删除。

输出描述

对于每个操作2输出一行,

如果序列为空,输出”Empty.”(不含双引号),

如果序列不为空,则输出当前序列中最大的数。

样例输入

6
1 100
2
2
1 666
1 233
2

样例输出

100
Empty.
666

数据范围

n=1000000,1<=x<=1000000000

时空限制

(幽默时空)

1s, 512M

TLE代码 (其实样例也没过)

#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int op;
        cin>>op;
        if(op==1){
            int x;
            cin>>x;
            v.push_back(x);
        }
        else{
            if(v.empty()) cout<<"Empty."<<endl;
            else{
                int maxi=INT_MIN,idx;
                for(int j=0;j<v.size();j++){
                    if(v[j]>maxi) idx=j;maxi=v[j];
                }
                cout<<maxi<<endl;
                v.erase(v.begin()+idx);
            }
        }
    }
    return 0;
}

你可以试试使用max_element函数试试会不会报错,我也不明白我的小熊猫为什么会报错,这个函数的作用是找出vector容器的最大的值,及其位置,需要一个类似变量的东西存储

vector<int>::iterator it = max_element(v.begin(), v.end());

去试试吧,我也不知道行不行

1 个赞

这不是大根堆板子吗?

没学过

优先队列会用吗?

会一点

纯优先队列就行了

我试一下

#include<bits/stdc++.h>
using namespace std;
priority_queue<int> q;
int n;
int main(){
	cin>>n;
	while(n--){
		int op,x;
		cin>>op;
		if(op==1) {
			cin>>x;
			q.push(x);
		}
		else{
			if(q.empty()) cout<<"Empty."<<endl;
			else{
				cout<<q.top()<<endl;;
				q.pop();
			}
		}
	}
	return 0;
} 

板子我就直接发了,没什么好说的,不会自己补课了

1 个赞

谢谢,刚刚自己也写出来了,给dalao解决方案