Skip to content

Instantly share code, notes, and snippets.

@surinoel
Created September 19, 2019 15:22
Show Gist options
  • Save surinoel/1ade7cdb2f30e4e350f29880bd818098 to your computer and use it in GitHub Desktop.
Save surinoel/1ade7cdb2f30e4e350f29880bd818098 to your computer and use it in GitHub Desktop.
#include <deque>
#include <tuple>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
bool check[101];
bool cmp(const tuple<int, int, int> &u, const tuple<int, int, int> &v) {
if (get<2>(u) == get<2>(v)) {
return get<0>(u) > get<0>(v);
}
return get<2>(u) > get<2>(v);
}
bool cmp2(const tuple<int, int, int> &u, const tuple<int, int, int> &v) {
return get<1>(u) < get<1>(v);
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
memset(check, false, sizeof(check));
int n, m;
cin >> n >> m;
deque<tuple<int, int, int>> dq;
for (int i = 0; i < m; i++) {
int num;
cin >> num;
if (check[num]) {
for (int j = 0; j < dq.size(); j++) {
if (get<1>(dq[j]) == num) {
get<2>(dq[j]) += 1;
break;
}
}
}
else {
check[num] = true;
if (dq.size() == n) {
sort(dq.begin(), dq.end(), cmp);
check[get<1>(dq.back())] = false;
dq.pop_back();
dq.push_back(make_tuple(i, num, 1));
}
else {
dq.push_back(make_tuple(i, num, 1));
}
}
}
sort(dq.begin(), dq.end(), cmp2);
for (int i = 0; i < dq.size(); i++) {
cout << get<1>(dq[i]) << ' ';
}
cout << '\n';
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment