4、 最美的花(d.cpp)
【题目描述】
花园中有一排五颜六色的花,顺次编号为1...N,编号为i的花的颜色为ci,同时每一朵花有一个美丽值,美丽值越大那么这朵花就越漂亮,其中编号为i的花的美丽值为bi。现在小朋友们想找出颜色为c的美丽值最大的花。你来帮帮他们吧。
【输入格式】
第一行:一个数N(1≤N≤100000),表示花的数量。
第2~N+1行,每行有2个整数,依次表示每朵花的颜色值ci和美丽值bi。
第N+2行:有一个数m(1≤m≤100000),表示m次询问。
第N+3行有m个数定,表示每次询问颜色为c的美丽值最大的花。
【输出格式】
输出有1行,共m个数,每个数以一个空格隔开,依次输出查询到颜色为c的最美丽的花的美丽值。如果花园中没有这种颜色的花,请输出-1。
【输入样例】
5
1 6
3 9
1 2
6 3
6 4
2
3 1
【输出样例】
9 6
【样例解释】
花园中颜色为3号色的,最美丽的花的美丽值是9,颜色为1号色的,最美丽的花的美丽值是6。
【数据范围】
50%的数据 1 ≤ N ≤1000,1≤m≤1000, 1≤ci≤1000 , 1≤bi≤10^9 。
80%的数据 1 ≤ N ≤10000,1≤m≤10000, 1≤ci≤10000 , 1≤bi≤10^9 。
100%的数据 1 ≤ N ≤10^5 ,1≤m≤10^5, 0≤ci≤10^6 , 1≤bi≤10^9
就是下标而已,献上代码:
#include<bits/stdc++.h>
using namespace std;
long long n,m,c,b,s[10000009],e;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&c,&b);
if(s[c]<b)s[c]=b;
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&e);
if(s[e]==0)printf("-1 ");
else printf("%d ",s[e]);
}
return 0;
}
别忘了用格式化输入、输出和long long!
版权归原作者 海鸥日历桃子 所有, 如有侵权,请联系我们删除。