0


s2020gc54最美的花

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!

标签: c++ 算法 蓝桥杯

本文转载自: https://blog.csdn.net/knight__OLT/article/details/130816063
版权归原作者 海鸥日历桃子 所有, 如有侵权,请联系我们删除。

“s2020gc54最美的花”的评论:

还没有评论