๋ฌธ์
N(1 โค N โค 100,000)๊ฐ์ ์ ์๋ค์ด ์์ ๋, a๋ฒ์งธ ์ ์๋ถํฐ b๋ฒ์งธ ์ ์๊น์ง ์ค์์ ์ ์ผ ์์ ์ ์, ๋๋ ์ ์ผ ํฐ ์ ์๋ฅผ ์ฐพ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด ์๋๋ค. ํ์ง๋ง ์ด์ ๊ฐ์ a, b์ ์์ด M(1 โค M โค 100,000)๊ฐ ์ฃผ์ด์ก์ ๋๋ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด์.
์ฌ๊ธฐ์ a๋ฒ์งธ๋ผ๋ ๊ฒ์ ์
๋ ฅ๋๋ ์์๋ก a๋ฒ์งธ๋ผ๋ ์ด์ผ๊ธฐ์ด๋ค. ์๋ฅผ ๋ค์ด a=1, b=3์ด๋ผ๋ฉด ์
๋ ฅ๋ ์์๋๋ก 1๋ฒ, 2๋ฒ, 3๋ฒ ์ ์ ์ค์์ ์ต์, ์ต๋๊ฐ์ ์ฐพ์์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ ์๋ค์ 1์ด์ 1,000,000,000์ดํ์ ๊ฐ์ ๊ฐ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ a, b์ ์์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
M๊ฐ์ ์ค์ ์ ๋ ฅ๋ฐ์ ์์๋๋ก ๊ฐ a, b์ ๋ํ ๋ต์ ์ต์๊ฐ, ์ต๋๊ฐ ์์๋ก ์ถ๋ ฅํ๋ค.
ํ์ด
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ~

// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
ll INF = 1000000001;
int n,m, sz,x;
vector<ll> maxTree;
vector<ll> minTree;
void updateTree(int i, int val) {
int idx = i + sz - 1;
maxTree[idx] = val;
minTree[idx] = val;
while(idx>1) {
idx /= 2;
minTree[idx] = min(minTree[idx*2], minTree[idx*2+1]);
maxTree[idx] = max(maxTree[idx*2], maxTree[idx*2+1]);
}
}
int getMinMax(int a, int b, bool isMax) {
ll ans = isMax ? 0 : INF;
vector<ll>&tree = isMax ? maxTree : minTree;
int left = a + sz - 1;
int right = b + sz - 1;
while(left <= right) {
if(left%2 == 1) {
ans = isMax ? max(ans, tree[left]) : min(ans, tree[left]);
left++;
}
left /= 2;;
if(right%2 == 0) {
ans = isMax ? max(ans, tree[right]) : min(ans, tree[right]);
right--;
}
right /= 2;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
cin >> n >> m;
sz = pow(2, floor(log2(4*n)-1));
maxTree.assign(2*sz, 0);
minTree.assign(2*sz, INF);
for(int i=1; i<=n; i++) {
cin >> x;
updateTree(i, x);
}
int a, b;
while(m--) {
cin >> a >> b;
cout << getMinMax(a,b,false) << " " << getMinMax(a,b,true) << "\n";
}
return 0;
}
'๐๏ธ ICPC Sinchon > Segment Tree' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 11505๋ฒ: ๊ตฌ๊ฐ ๊ณฑ ๊ตฌํ๊ธฐ (Gold I) (0) | 2025.02.06 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 14428๋ฒ: ์์ด๊ณผ ์ฟผ๋ฆฌ 16 (Gold I) (0) | 2025.02.06 |
[BOJ][C++] ๋ฐฑ์ค 2042๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ (Gold I) (0) | 2025.02.04 |