๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 11663๋ฒˆ - ์„ ๋ถ„ ์œ„์˜ ์ 

by ์•ˆ์ฃผํ˜• 2022. 9. 6.

๋ฌธ์ œ

 

11663๋ฒˆ: ์„ ๋ถ„ ์œ„์˜ ์ 

์ฒซ์งธ ์ค„์— ์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ์„ ๋ถ„์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 100,000) ๋‘˜์งธ ์ค„์—๋Š” ์ ์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ์ ์ด ๊ฐ™์€ ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ์„ ๋ถ„์˜ ์‹œ์ž‘์ ๊ณผ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N, M; cin>>N>>M;
    vector<int> v;
    for(int i=0; i<N; i++){
        int inp; cin>>inp;
        v.push_back(inp);
    }
    sort(v.begin(), v.end());
    for(int i=0; i<M; i++){
        int a, b; cin>>a>>b;
        int first = lower_bound(v.begin(), v.end(), a) - v.begin();
        int second = upper_bound(v.begin(), v.end(), b) - v.begin();
        cout<<second - first<<'\n';
    }
    
}

 

ํ’€์ด

๊ทธ๋ƒฅ a์ด์ƒ b์ดํ•˜์ธ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

upper_bound๋ฅผ ์‚ฌ์šฉํ•ด์„œ b๋ณด๋‹ค ํฐ ๊ฐ’์˜ ์ฒซ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ณ 

lower_bound๋ฅผ ์‚ฌ์šฉํ•ด์„œ a๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์ฒซ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ upper_bound_index - lower_bound_index๋ฅผ ํ•˜๋ฉด a์ด์ƒ b์ดํ•˜์ธ ๊ฐ’์˜ ๊ฐฏ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€