这一题,我想了两种解法去做。
第一种,数组大模拟:
#include <iostream>
using namespace std;
struct iuv
{
int id,urg;
bool vis;
};
iuv list[100005];
int n,op,Id,Urg,listi,maxmin,id;
bool error;
int main()
{
cin >> n;
for(int i=0;i<n;i++)
{
cin >> op;
if(op==1)
{
cin >> Id >> Urg;
list[listi].id=Id;
list[listi].urg=Urg;
list[listi].vis=1;
listi++;
}
if(op==2)
{
error=0;
maxmin=100000000;
for(int i=0;i<listi;i++)
{
if(list[i].vis==0)
{
continue;
}
if(list[i].urg<maxmin)
{
maxmin=list[i].urg;
Id=i;
id=list[i].id;
error=1;
}
}
if(error==0)
{
cout << "error" << endl;
continue;
}
cout << id << endl;
list[Id].vis=0;
}
if(op==3)
{
error=0;
maxmin=-100000000;
for(int i=0;i<listi;i++)
{
if(list[i].vis==0)
{
continue;
}
if(list[i].urg>maxmin)
{
maxmin=list[i].urg;
Id=i;
id=list[i].id;
error=1;
}
}
if(error==0)
{
cout << "error" << endl;
continue;
}
cout << id << endl;
list[Id].vis=0;
}
if(op==4)
{
cin >> Id >> Urg;
for(int i=0;i<listi;i++)
{
if(list[i].id==Id)
{
list[i].urg=Urg;
}
}
}
if(op==5)
{
cin >> Id >> Urg;
for(int i=0;i<listi;i++)
{
if(list[i].urg==Urg)
{
list[i].id=Id;
}
}
}
if(op==6)
{
error=0;
cin >> Id;
for(int i=0;i<listi;i++)
{
if(list[i].vis==1&&list[i].id==Id)
{
cout << list[i].urg << endl;
error=1;
}
}
if(error==0)
{
cout << "error" << endl;
}
}
if(op==7)
{
error=0;
cin >> Urg;
for(int i=0;i<listi;i++)
{
if(list[i].vis==1&&list[i].urg==Urg)
{
cout << list[i].id << endl;
error=1;
}
}
if(error==0)
{
cout << "error" << endl;
}
}
}
return 0;
}
此做法TLE,60分。
第二种,unordered_map优化:
#include <unordered_map>
#include <iostream>
using namespace std;
unordered_map <int,int> um;
int n,op,id,urg,maxmin;
bool error;
int main()
{
cin >> n;
for(register int i=0;i<n;i++)
{
cin >> op;
if(op==1)
{
cin >> id >> urg;
um[id]=urg;
}
if(op==2)
{
maxmin=100000000;
for(auto i=um.begin();i!=um.end();i++)
{
if(i->second<maxmin)
{
maxmin=i->second;
id=i->first;
}
}
if(maxmin==100000000)
{
cout << "error" << endl;
}
cout << id << endl;
auto i=um.find(id);
um.erase(i);
}
if(op==3)
{
maxmin=-100000000;
for(auto i=um.begin();i!=um.end();i++)
{
if(i->second>maxmin)
{
maxmin=i->second;
id=i->first;
}
}
if(maxmin==-100000000)
{
cout << "error" << endl;
}
cout << id << endl;
auto i=um.find(id);
um.erase(i);
}
if(op==4)
{
cin >> id >> urg;
um[id]=urg;
}
if(op==5)
{
cin >> id >> urg;
for(auto i=um.begin();i!=um.end();i++)
{
if(i->second==urg)
{
um.erase(i);
break;
}
}
um[id]=urg;
}
if(op==6)
{
cin >> id;
if(um.find(id)==um.end())
{
cout << "error" << endl;
}
cout << um[id] << endl;
}
if(op==7)
{
error=0;
cin >> urg;
for(auto i=um.begin();i!=um.end();i++)
{
if(i->second==urg)
{
cout << i->first << endl;
error=1;
break;
}
}
if(error==0)
{
cout << "error" << endl;
}
}
}
return 0;
}
结果TLE0分???
有人能帮忙看下吗?