๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 21318 : ํ”ผ์•„๋…ธ ์ฒด์กฐ (๋ˆ„์ ํ•ฉ)

https://www.acmicpc.net/problem/21318

๋ฌธ์ œ

ํ”ผ์•„๋…ธ๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ์‹œ์€์ด๋Š” ๋งค์ผ ์•„์นจ ํ”ผ์•„๋…ธ ์ฒด์กฐ๋ฅผ ํ•œ๋‹ค. ์‹œ์€์ด๋Š” N๊ฐœ์˜ ์•…๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๋กœ ๋ถ€๋ฅธ๋‹ค. ๊ฐ ์•…๋ณด๋Š” 1 ์ด์ƒ 109 ์ดํ•˜์˜ ์ •์ˆ˜๋กœ ํ‘œํ˜„๋˜๋Š” ๋‚œ์ด๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋‚œ์ด๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜๊ฐ€ ํด์ˆ˜๋ก ์–ด๋ ค์šด ์•…๋ณด์ด๋‹ค. 1 ≤ x ≤ y ≤ N ์„ ๋งŒ์กฑํ•˜๋Š” ๋‘ ์ •์ˆ˜ x, y๋ฅผ ๊ณจ๋ผ x๋ฒˆ๋ถ€ํ„ฐ y๋ฒˆ๊นŒ์ง€์˜ ์•…๋ณด๋ฅผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์—ฐ์ฃผํ•˜๋Š” ๊ฒƒ์ด ํ”ผ์•„๋…ธ ์ฒด์กฐ์ด๋‹ค.

์‹œ์€์ด๋Š” ํ”ผ์•„๋…ธ ์ฒด์กฐ๋ฅผ ํ•  ๋•Œ, ์ง€๊ธˆ ์—ฐ์ฃผํ•˜๋Š” ์•…๋ณด๊ฐ€ ๋ฐ”๋กœ ๋‹ค์Œ์— ์—ฐ์ฃผํ•  ์•…๋ณด๋ณด๋‹ค ์–ด๋ ต๋‹ค๋ฉด ์‹ค์ˆ˜๋ฅผ ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ž๋ฉด, i(x  i < y)๋ฒˆ ์•…๋ณด์˜ ๋‚œ์ด๋„๊ฐ€ i + 1๋ฒˆ ์•…๋ณด์˜ ๋‚œ์ด๋„๋ณด๋‹ค ๋†’๋‹ค๋ฉด ์‹ค์ˆ˜๋ฅผ ํ•œ๋‹ค. ํŠนํžˆ, ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ฐ์ฃผํ•˜๋Š” y๋ฒˆ ์•…๋ณด์—์„  ์ ˆ๋Œ€ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹œ์€์ด๋Š” ์˜ค๋Š˜๋„ ํ”ผ์•„๋…ธ ์ฒด์กฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ์ •์ˆ˜ x์™€ y๋ฅผ ๊ณจ๋ž๊ณ , ๋ฌธ๋“ ๊ถ๊ธˆํ•œ ๊ฒƒ์ด ์ƒ๊ฒผ๋‹ค. ์˜ค๋Š˜ ํ•  ํ”ผ์•„๋…ธ ์ฒด์กฐ์—์„œ ์‹ค์ˆ˜ํ•˜๋Š” ๊ณก์€ ๋ช‡ ๊ฐœ๋‚˜ ๋ ๊นŒ?

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์•…๋ณด์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์— 1๋ฒˆ ์•…๋ณด๋ถ€ํ„ฐ N๋ฒˆ ์•…๋ณด๊นŒ์ง€์˜ ๋‚œ์ด๋„๊ฐ€ ๊ณต๋ฐฑ์„ ๊ตฌ๋ถ„์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์„ธ ๋ฒˆ์งธ ์ค„์— ์งˆ๋ฌธ์˜ ๊ฐœ์ˆ˜ Q(1 ≤ Q ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‹ค์Œ Q๊ฐœ์˜ ์ค„์— ๊ฐ ์ค„๋งˆ๋‹ค ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ x, y(1 ≤ x ≤ y ≤ N)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

x๋ฒˆ๋ถ€ํ„ฐ y๋ฒˆ๊นŒ์ง€์˜ ์•…๋ณด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์—ฐ์ฃผํ•  ๋•Œ, ๋ช‡ ๊ฐœ์˜ ์•…๋ณด์—์„œ ์‹ค์ˆ˜ํ•˜๊ฒŒ ๋ ์ง€ 0 ์ด์ƒ์˜ ์ •์ˆ˜ ํ•˜๋‚˜๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ถœ๋ ฅ์€ ๊ฐœํ–‰์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.


 

์‹ค๋ฒ„ 1 ๋ˆ„์ ํ•ฉ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋– ์˜ฌ๋ฆฌ๊ธฐ ์‰ฌ์› ์œผ๋‚˜ ๋งˆ์ง€๋ง‰ ์—ฐ์‚ฐ์—์„œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜!

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <algorithm>
using namespace std;

int n;
int nlist[100001];
int over[100001]={0};
int q;
int x;
int y;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> nlist[i];
        if(i==1) over[i] = 0;
        else {
            over[i] += over[i-1];
            if(nlist[i] < nlist[i-1]) over[i]++;
        }
    }

    cin >> q;
    for (int i = 0; i < q;++i){
        cin >> x >> y;
        cout << over[y] - over[x]<<"\n";
    }
}