Codeforces Round #367 (Div. 2) B. Interesting drink (二分)

本文介绍了一种基于预算和商店价格的算法,通过排序和二分查找来确定顾客可以在哪些商店购买商品,适用于需要快速匹配价格范围的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B. Interesting drink

time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasiliy likes to rest after a hard work, so you may often meet him in some bar nearby. As all programmers do, he loves the famous drink “Beecola”, which can be bought in n different shops in the city. It’s known that the price of one bottle in the shop i is equal to xi coins.

Vasiliy plans to buy his favorite drink for q consecutive days. He knows, that on the i-th day he will be able to spent mi coins. Now, for each of the days he want to know in how many different shops he can buy a bottle of “Beecola”.
Input

The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of shops in the city that sell Vasiliy’s favourite drink.

The second line contains n integers xi (1 ≤ xi ≤ 100 000) — prices of the bottles of the drink in the i-th shop.

The third line contains a single integer q (1 ≤ q ≤ 100 000) — the number of days Vasiliy plans to buy the drink.

Then follow q lines each containing one integer mi (1 ≤ mi ≤ 109) — the number of coins Vasiliy can spent on the i-th day.
Output

Print q integers. The i-th of them should be equal to the number of shops where Vasiliy will be able to buy a bottle of the drink on the i-th day.
Example
Input

5
3 10 8 6 11
4
1
10
3
11

Output

0
4
1
5

Note

On the first day, Vasiliy won’t be able to buy a drink in any of the shops.

On the second day, Vasiliy can buy a drink in the shops 1, 2, 3 and 4.

On the third day, Vasiliy can buy a drink only in the shop number 1.

Finally, on the last day Vasiliy can buy a drink in any shop.

题意:有n个商店卖东西,然后给你每个商店的价格,然后给你一个人每天能支配的钱数,然后让你求这个人每天能在多少个店里买东西

思路:直接对价格排序二分就好了。

ac代码:

/* ***********************************************
Author       : AnICoo1
Created Time : 2016-08-19-17.54 Friday
File Name    : D:\MyCode\2016-8月\2016-8-19.cpp
LANGUAGE     : C++
Copyright  2016 clh All Rights Reserved
************************************************ */
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1010000
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x,y) memset(x,(y),sizeof(x))
#define PI acos(-1)
#define gn (sqrt(5.0)+1)/2
#define eps 1e-8
using namespace std;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
double dpow(double a,ll b){double ans=1.0;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;}
//head
int a[MAXN],n;

int vis[MAXN];

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    sort(a,a+n);int k=a[0],last=0,cnt=1;;
    for(int i=1;i<n;i++)
    {
        if(a[i]==k)
            cnt++;
        else
        {
            vis[k]=last+cnt;last=vis[k];
            k=a[i];cnt=1;
        }
    }
    vis[k]=last+cnt;
    int q;scanf("%d",&q);
    for(int i=1;i<=q;i++)
    {
        int cos;scanf("%d",&cos);
        int k=lower_bound(a,a+n,cos)-a;
        int cnt;
        if(a[k]==cos) cnt=a[k];
        else cnt=a[k-1];
        if(cnt>100000) printf("%d\n",n);
        else printf("%d\n",vis[cnt]);

    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值