题目描述
小可家里有一个木材仓库,仓库里面存储着不同长度的木材(没有长度相同的两根木材)。放假的时候,小可会在仓库里面帮忙,有时候小可需要进木材,有时有需要卖出木材,你需要帮助小可维护这个木材仓库。
这一天小可需要进行n次操作:
1 x,表示小可在仓库中放入一根长度为x的木材。注意:如果仓库中已经有长度x的木材,需要输出”Already Exist”。
2 x,表示小可要在仓库里面取出长度为x的木材。注意:如果此时仓库里面没有长度恰好为x的木材,那就需要取出仓库中和x长度最接近的木材,如果有多根木材符合上述要求,取出最短的一根,输出取出木材的长度;如果此时仓库是空的,则输出”Empty”。
输入
第一行输入一个n,表示接下来会有n次操作。(n≤100000)
接下来n行,每行两个数字,1 x表示放入长度为x的木材,2 x表示取出长度为x的木材。具体操作按照题目的注意实现来操作。(x≤109
输出
按照不同操作,输出不同结果,不同操作的结果以换行间隔
样例输入
4
1 4
2 7
1 2
2 2
样例输出
4
2
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,x,z,p,i,minn;
vector<int> v;
int main(){
cin>>n;
while(n--){
cin>>z>>x;
if(z==1)v.push_back(x);
else{
p=-1;
for(i=0;i<v.size();i++){
if(v[i]==p){
p=i;
break;
}
}if(p==-1){
minn=INT_MAX;
for(i=0;i<v.size();i++){
if(abs(v[i]-x)<minn){
minn=v[i]-x;
p=i;
}
}cout<<v[p]<<endl;
v.erase(v.begin()+p);
}else{
cout<<x<<endl;
v.erase(v.begin()+p);
}
}
}return 0;
}