按年龄保存,排序寻找同一年龄段中最大即可。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
const int maxn=1e5+10;
struct Richer{
char name[10];
int age;
int w;
bool operator < (const Richer &b) const{
if(w!=b.w) return w>b.w;
if(age!=b.age) return age<b.age;
return strcmp(name,b.name) < 0;
}
}R[maxn];
int n,k,m,a1,a2;
int main(){
//freopen("E://PAT/input.txt", "r", stdin);
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
scanf("%s %d %d",R[i].name,&R[i].age,&R[i].w);
}
sort(R,R+n);
for(int i=1;i<=k;i++){
bool flag=false;
printf("Case #%d:\n",i);
scanf("%d%d%d",&m,&a1,&a2);
int index=0;
while(m--){
for(int j=index;j<n;j++){
if(R[j].age>=a1&&R[j].age<=a2){
flag=true;
index=j+1;
printf("%s %d %d\n",R[j].name,R[j].age,R[j].w);
break;
}
}
}
if(!flag) printf("None");
}
return 0;
}