C
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define INF 1000000
int heap[1000010];
int arr[1000010];
int k,n;
int cmp(const void *a,const void *b){return *(int *)a - *(int *)b;}
void update(int val)
{
int i = 1;
while(val > heap[i*2] || val > heap[i*2+1])
{
if(heap[i*2] > heap[i*2+1])
{
heap[i] = heap[i*2+1];
i = i<<1|1;
heap[i] = val;
}
else
{
heap[i] = heap[i*2];
i = i<<1;
heap[i] = val;
}
}
}
int main()
{
int i,value;
char c;
while(~scanf("%d%d",&n,&k))
{
for(i = 0; i < 1000010; i++) heap[i] = INF;
getchar();
for(i = 0; i < k; i++)
{
scanf("%c %d",&c,&arr[i]);
getchar();
}
qsort(arr,k,sizeof(int),cmp);
for(i = 1; i <= k; i++)
heap[i] = arr[i-1];
for(i = 0; i < n-k; i++)
{
scanf("%c",&c);
if(c == 'Q') printf("%d\n",heap[1]);
else
{
scanf(" %d",&value);
if(value > heap[1])
{
heap[1] = value;
update(value);
}
}
getchar();
}
}
return 0;
}
C++ STL
#include<algorithm>
#include<stdio.h>
#include<stdlib.h>
#include<iomanip>
#include<string>
#include<string.h>
#include<math.h>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<iostream>
using namespace std;
struct Node
{
int a;
friend bool operator < (const struct Node n1,const struct Node n2)
{
return n1.a > n2.a;
}
};
int main()
{
char c;
int num,s,n,k;
Node temp;
while(~scanf("%d%d",&n,&k))
{
priority_queue<Node> Q;
num = 0;
while(n--)
{
getchar();
scanf("%c",&c);
if(c == 'I')
{
scanf("%d",&s);
if(num < k)
{
temp.a = s;
Q.push(temp);
num ++;
}
else
{
if(Q.top().a >= s)continue;
Q.pop();
temp.a = s;
Q.push(temp);
}
}
else
{
printf("%d\n",Q.top().a);
}
}
}
return 0;
}