题意:有一些交易event,要求把price相同的合并,最后选取k个最小的sell和最大的buy
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=1e5+10;
int s[maxm];
int b[maxm];
char a[5];
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(s,0,sizeof(s));
memset(b,0,sizeof(b));
int scount=0,bcount=0,dif=0;
for(int i=0; i<m; i++)
{
int x,y;
scanf("%s%d%d",a,&x,&y);
if(a[0]=='S')
{
if(!s[x])
{
scount++;
}
s[x]+=y;
}
else
{
if(!b[x])
{
bcount++;
}
b[x]+=y;
}
}
if(scount>n)
{
dif=scount-n;
}
scount=min(scount,n);
for(int i=100000; scount!=0; i--)
{
if(s[i]!=0)
{
if(dif>0)
{
dif--;
continue;
}
printf("S %d %d\n",i,s[i]);
scount--;
}
}
bcount=min(bcount,n);
for(int i=100000; bcount!=0; i--)
{
if(b[i]!=0)
{
printf("B %d %d\n",i,b[i]);
bcount--;
}
}
}
return 0;
}