๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j

www.acmicpc.net

 

๐Ÿง‘‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

๋ฐฑ์ค€ ์‚ฌ์ดํŠธ์—์„œ ๋‹จ๊ณ„๋ณ„ ํ’€์–ด๋ณด๊ธฐ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ •๋ณต ์ค‘์ธ๋ฐ, ๊ทธ ์ค‘ ๋ˆ„์  ํ•ฉ์ด๋ผ๋Š” ์œ ํ˜•์— ๋Œ€ํ•œ ์ฒซ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๋”ฑ ์ƒ๊ฐ๋‚œ ๊ฒƒ์€, ํ†ต๊ณ„ํ•™์—์„œ ์“ฐ์ด๋Š” ๋ˆ„์ ๋ถ„ํฌํ•จ์ˆ˜(CDF, Cumulative Distribution Function)์˜€์Šต๋‹ˆ๋‹ค.

 

๋ฌผ๋ก  ๊ฐœ๋…์ ์œผ๋กœ ์™„์ „ํžˆ ๋™์ผํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ œ ํ’€์ด์˜ ๊ธฐ๋ฐ˜ ์•„์ด๋””์–ด๊ฐ€ ๋˜์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์•„์ด๋””์–ด๋ฅผ ํ† ๋Œ€๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฃผ์–ด์ง„ N๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ˆ„์ ํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, { 5, 4, 3, 2, 1 } ์ˆœ์„œ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋ฉด, { 5, 9, 12, 14, 15 }๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
  2. ์ฃผ์–ด์ง„ ๊ตฌ๊ฐ„ i, j์— ๋Œ€ํ•˜์—ฌ, arr[j] - arr[i-1]์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ i = 1์ธ ๊ฒฝ์šฐ๋ผ๋ฉด, ์ฒ˜์Œ ~ j๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ์ด๋ฏ€๋กœ, arr[j]๋งŒ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

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

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

	int N, M;
	cin >> N >> M;

	vector<int> accumulatedSum(N + 1);
	cin >> accumulatedSum[1];
	
	for (int i = 2; i <= N; i++)
	{
		int number;
		cin >> number;
		accumulatedSum[i] = accumulatedSum[i - 1] + number;
	}

	for (int loop = 0; loop < M; loop++)
	{
		int i, j;
		cin >> i >> j;

		int Xj = accumulatedSum[j];
		int Xi = (i == 1) ? 0 : accumulatedSum[i - 1];

		cout << Xj - Xi << "\n";
	}

	return 0;
}

 

 

728x90
๋ฐ˜์‘ํ˜•