//直接用一个struct存所有人,排个序,从前往后遍历,如果年纪属于给定范围就输出即可
//仔细研究cin,cout,超时怎么办,
//char->name的转化
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100010;
int n,m;
struct Person{
int age,money;
string name;
}person[N];
bool cmp(Person a,Person b)
{
if(a.money!=b.money) return a.money>b.money;
else if(a.age!=b.age) return a.age<b.age;
else return a.name<b.name;
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0);
//cin>>n>>m;
scanf("%d%d",&n,&m);
char name[10];
for(int i=0;i<n;i++)
{ int age, money;
scanf("%s%d%d", name, &age, &money);
person[i].name=name,person[i].age=age,person[i].money=money;
//cin>>person[i].name>>person[i].age>>person[i].money;
}
sort(person,person+n,cmp);
for(int i=1;i<=m;i++)
{
int m,amin,amax;
//cin>>m>>amin>>amax;
scanf("%d%d%d",&m,&amin,&amax);
printf("Case #%d:\n",i);
//cout<<"Case #"<<i<<":"<<endl;
int cnt=0;
for(int j=0;j<n;j++)
{
if(person[j].age>=amin&&person[j].age<=amax)
{
//cout<<person[j].name<<' '<<person[j].age<<' '<<person[j].money<<endl;
printf("%s %d %d\n",person[j].name.c_str(),person[j].age,person[j].money);
cnt++;
}
if(cnt==m) break;
}
if(cnt==0) printf("None\n"); //cout<<"None"<<endl;
}
return 0;
}
但感觉如果想卡这个代码,数据还是可以的。。。只要让两端点都有满足要求的,这样每次都要遍历完,也就1e8了