#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int n,m,p,q;
char s[5];
int main()
{
while (~scanf ("%d%d",&n,&m)) {
vector<int> v;
for (int i=0;i<n;i++) {
scanf ("%d",&p);
v.push_back(p);
}
while (m--) {
scanf ("%s",s);
if (s[0]=='A') {
scanf ("%d%d",&p,&q);
for (int i=0;i<v.size();i++) {
if (v[i]==p) {
v.insert(v.begin()+i,q);
break;
}
}
}
else if (s[0]=='D') {
scanf ("%d",&p);
for (int i=0;i<v.size();i++) {
if (v[i]==p) {
v.erase(v.begin()+i);
break;
}
}
}
}
printf ("%d\n%d",v.size(),v[0]);
for (int i=1;i<v.size();i++)
printf (" %d",v[i]);
puts("");
}
return 0;
}
学长版
#include <bits/stdc++.h>
using namespace std;
class List{
struct Node{
int value;
Node* next;
Node(int _v = 0): value(_v){next = NULL;}
};
Node* head;
int Size;
public:
List(){Size = 0, head = new Node();}
int size(){return Size;}
void push_front(int s){
Node* p = new Node(s);
p -> next = head -> next;
head -> next = p;
Size++;
}
void pop(int s){
for(Node* p = head; p->next; p = p->next){
if(p->next->value == s){
p->next = p->next->next;
Size--;
break;
}
}
}
void add(int P, int Q){
for(Node* p = head; p->next; p = p->next){
if(p->next->value == P){
Size++;
Node* k = new Node(Q);
k->next = p->next;
p->next = k;
break;
}
}
}
void print(){
for(Node *p = head->next; p; p = p->next)
printf("%d ", p->value);
}
};
int main(){
stack<int> s;
List l;
int n, m, k;
cin >> n >> k;
for(int i = 0; i < n; i++){
scanf("%d", &m);
s.push(m);
}
while(s.size()) {
l.push_front(s.top());
s.pop();
}
while(k--){
int p, q;
char s[8];
scanf("%s", s);
if(s[0] == 'A'){
scanf("%d%d",&p, &q);
l.add(p, q);
}
else{
scanf("%d", &p);
l.pop(p);
}
}
cout << l.size() << endl;
l.print();
return 0;
}