#include <iostream>
#include <list>
#include <set>
#include <vector>
using namespace std;
int m, n;
int opask = 0;
class node {
public:
int idm;
long long id;
long long score;
node(int c, int a, int b) :idm(c), id(a), score(b) {}
};
class cmp {
public:
bool operator()(node a, node b)
{
if (a.score == b.score)
{
if (a.idm == b.idm)
{
return a.id < b.id;
}
return a.idm < b.idm;
}
return a.score > b.score;
}
};
int main()
{
cin >> m >> n;
set<node,cmp> li;
set <int> del[55];
//set<int> st[5005];
vector<int> st[5005];
for (int i = 0; i < n; i++)
{
int id, score;
cin >> id >> score;
for (int j = 0; j < m; j++)
li.insert(node(j, id, score));
}
int opnum;
cin >> opnum;
for (int i = 0; i < opnum; i++)
{
int flag;
cin >> flag;
if (flag == 1)
{
int type, commodityid, score;
cin >> type >> commodityid >> score;
li.insert(node(type, commodityid, score));
}
else if (flag == 2)
{
int type, commodityid;
cin >> type >> commodityid;
del[type].insert(commodityid);
}
else if (flag == 3)
{
int k[55];
for (int i = 0; i <= m; i++)
cin >> k[i];
int sum = 0;
int max[55] = { 0 };
for (auto i : li)
{
if (max[i.idm] < k[i.idm + 1] && sum < k[0] && del[i.idm].find(i.id) == del[i.idm].end())
{
//st[opask*m + i.idm].insert(i.id);
st[opask*m + i.idm].push_back(i.id);
sum++;
max[i.idm]++;
}
if (sum >= k[0])
break;
}
opask++;
}
}
for (int i = 0; i < opask*m; i++)
{
if (st[i].empty())
cout << "-1" << endl;
else
{
for (auto it : st[i])
cout << it << " ";
cout << endl;
}
}
return 0;
}
起先用链表来存取商品信息,提交后发现时间超了,应该是查询商品时太慢,所以采用set来存取商品信息来提交,但提交后发现只得60分,原因如其他博客所说,应该是后台的数据有问题
,所以输出时不用对他的商品id进行排序就可,刚开始我是把信息存到set里直接就是排好序的,后来就直接有vector来存取,就可以了,注释的就是排序的结果,