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;
}