By L_FW, contest: Codeforces Round #317 [AimFund Thanks-Round] (Div. 2), problem: (B) Order Book, Accepted
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN=100010;
struct stock{
char d;
int p,q;
}ss;
bool Bcmp(stock s1,stock s2){
return s1.p>s2.p;
}
bool Scmp(stock s1,stock s2){
return s1.p<s2.p;
}
int N,S;
bool flag;
int A[MAXN],B[MAXN];
vector<stock> BV;
vector<stock> SV;
int main(){
BV.clear();
SV.clear();
scanf("%d%d",&N,&S);
while(N--){
cin>>ss.d>>ss.p>>ss.q;
if(ss.d=='B'){
flag=true;
for(int i=0;i<BV.size();i++){
if(BV[i].p==ss.p){
BV[i].q+=ss.q;
flag=false;
break;
}
}
if(flag){
BV.push_back(ss);
}
}
else if(ss.d=='S'){
flag=true;
for(int i=0;i<SV.size();i++){
if(SV[i].p==ss.p){
SV[i].q+=ss.q;
flag=false;
break;
}
}
if(flag){
SV.push_back(ss);
}
}
}
sort(SV.begin(),SV.end(),Scmp);
sort(BV.begin(),BV.end(),Bcmp);
if(SV.size()<S){
for(int i=SV.size()-1;i>=0;i--)
printf("S %d %d\n",SV[i].p,SV[i].q);
}
else{
for(int i=S-1;i>=0;i--)
printf("S %d %d\n",SV[i].p,SV[i].q);
}
if(BV.size()<S){
for(int i=0;i<BV.size();i++)
printf("B %d %d\n",BV[i].p,BV[i].q);
}
else{
for(int i=0;i<S;i++)
printf("B %d %d\n",BV[i].p,BV[i].q);
}
return 0;
}