BOJ 13274. ์์ด
๐โโ๏ธ[Silver I] ์์ด - 13274
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 3592 KB, ์๊ฐ: 52 ms
๋ถ๋ฅ
์ ๋ ฌ
์ ์ถ ์ผ์
2024๋ 6์ 11์ผ 15:35:34
๋ฌธ์ ์ค๋ช
์งํ์ด๋ ์์ด์ ์ข์ํ๋ค. ์ง๊ธ ์งํ์ด๋ size ๊ฐ N ์ธ ์์ด์ ๊ฐ์ง๊ณ ๋๊ณ ์๋ค. ์งํ์ด๋ K ๊ฐ์ ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ์์ด์ ๋ณํ์ํฌ ๊ฒ์ธ๋ฐ, ์ฟผ๋ฆฌ์ ํ์ ๋ฐ ์์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- L R X : ์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ A[1], A[2], โฆ , A[N]์ด๋ผ ํ์. ์ฐ์ A[L], A[L+1], โฆ , A[R]์ X ๋งํผ ๋ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์์ด์ ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
์ฟผ๋ฆฌ๋ค์ ์์๋๋ก ๋ชจ๋ ์ํํ ํ์ ์์ด์ ์ถ๋ ฅํ๋ผ.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N ๊ณผ K ๊ฐ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 100000, 1 โค K โค 1000)
๋์งธ ์ค์ ์ ๋๊ฐ์ด 1018 ์ดํ์ธ, ์์ด์ ์ด๋ฃจ๋ N ๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
์ ์งธ ์ค๋ถํฐ K+2 ๋ฒ์งธ ์ค๊น์ง ์ฟผ๋ฆฌ L R X ๊ฐ ์ฃผ์ด์ง๋ค. (1 โค L โค R โค N, |X| โค 109)
์ถ๋ ฅ
์ฟผ๋ฆฌ๋ค์ ์์๋๋ก ๋ชจ๋ ์ํํ ํ์ ์์ด์ ์ถ๋ ฅํ๋ค.
๐ํ์ด
๋ฌธ์ ์ ์๊ฑด๋๋ก ์์ ์ ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ๋ฉ๋๋ค.
๊ทธ๋์ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ๋์ ํฉ์ ๊ณ์ฐํด์ค์ผํฉ๋๋ค.
์ฒ์์ ์์ด์ ์ ๋ ฌํฉ๋๋ค.
๊ตฌ๊ฐ ๋ณ๊ฒฝ ๊ด๋ฆฌ: ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ๊ตฌ๊ฐ์ ๋ํ ๊ฐ์ ๊ธฐ๋กํฉ๋๋ค.
๋์ ํฉ ์ ์ฉ: ๋ง์ง๋ง์ ๋์ ํฉ์ ์ ์ฉํ์ฌ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์๋ ์ฝ๋์์ ์ ๊ตฌ๊ฐ ๋ณ๊ฒฝ ๊ด๋ฆฌ๋ฅผ ํ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ์ฒ๋ฆฌ
for (int i = 0; i < K; ++i)
{
int L, R;
long long X;
cin >> L >> R >> X;
L--; R--; // 1๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๋ก ๋ณํ
// delta ๋ฐฐ์ด์ ๊ตฌ๊ฐ ๋ณ๊ฒฝ ์ฌํญ ๊ธฐ๋ก
delta[L] += X;
if (R + 1 < N)
{
delta[R + 1] -= X;
}
}
delta[R + 1] -= X;
์ ํด์ค์ผ๋ก์จ ๊ตฌ๊ฐํฉ์ด ๋๋ฌ์์ ์๋ฆฝ๋๋ค.
์ค์ ์ ์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ํฉ๋๋ค.
// ๋์ ํฉ ๊ณ์ฐ ๋ฐ ์ ์ฉ
long long cumulative = 0;
for (int i = 0; i < N; ++i)
{
cumulative += delta[i];
arr[i] += cumulative;
}
๋ณํ๋์ด ๊ณ์ ๊ธฐ๋ก๋์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ์ ์๊ฑด์ ์ฑ๋ฆฝํ์ฌ ๋์ํฉ๋๋ค.
๊ทธ ํ ์ต์ข ์ ์ผ๋ก ์ ๋ ฌ์ ํ๋ฉด ์ํ๋ ์ถ๋ ฅ๊ฐ์ด ๋์ต๋๋ค.
๐์ฝ๋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <climits>
using namespace std;
void solve()
{
int N, K;
cin >> N >> K;
vector<long long> arr(N);
for (int i = 0; i < N; ++i)
{
cin >> arr[i];
}
// ์์ด ์ ๋ ฌ
sort(arr.begin(), arr.end());
// ๋์ ๋ณํ๋์ ์ ์ฅํ ๋ฐฐ์ด
vector<long long> delta(N + 1, 0);
// ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ์ฒ๋ฆฌ
for (int i = 0; i < K; ++i)
{
int L, R;
long long X;
cin >> L >> R >> X;
L--; R--; // 1๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๋ก ๋ณํ
// delta ๋ฐฐ์ด์ ๊ตฌ๊ฐ ๋ณ๊ฒฝ ์ฌํญ ๊ธฐ๋ก
delta[L] += X;
if (R + 1 < N)
{
delta[R + 1] -= X;
}
}
// ๋์ ํฉ ๊ณ์ฐ ๋ฐ ์ ์ฉ
long long cumulative = 0;
for (int i = 0; i < N; ++i)
{
cumulative += delta[i];
arr[i] += cumulative;
}
// ์ต์ข
์์ด์ ๋ค์ ์ ๋ ฌ
sort(arr.begin(), arr.end());
// ์ต์ข
๊ฒฐ๊ณผ ์ถ๋ ฅ
for (int i = 0; i < N; ++i)
{
cout << arr[i] << " ";
}
cout << '\n';
}
int main()
{
FILE* stream;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen_s(&stream, "input.txt", "rt", stdin);
solve();
return 0;
}