티스토리 뷰
닫힌 구간 [a, b] 범위 내부의 순서는 고려되지 않으므로 구간의 최소, 최대를 구해서 a, b와 비교하면 되겠다.
#include<bits/stdc++.h>
using namespace std;
using pii=pair<int, int>;
int arr[100001];
pii Tree[400005];
void upd(int l, int r, int node, int p, int v){
if(p<l || r<p) return;
if(l==r) {
Tree[node]={v, v};
return;
}
int mid=l+r>>1;
upd(l, mid, 2*node, p, v), upd(mid+1, r, 2*node+1, p, v);
Tree[node]= { min(Tree[2*node].first, Tree[2*node+1].first),
max(Tree[2*node].second, Tree[2*node+1].second)};
}
pii qry(int l, int r, int node, int ql, int qr){
if(qr<l || r<ql) return {INT_MAX, -INT_MAX};
if(ql<=l && r<=qr) return Tree[node];
int mid=l+r>>1;
pii x=qry(l, mid, 2*node, ql, qr), y=qry(mid+1, r, 2*node+1, ql, qr);
return {min(x.first, y.first), max(x.second, y.second)};
}
int main(){
int T; scanf("%d", &T);
while(T--){
for(int i=0;i<400005;i++) Tree[i]={INT_MAX, -INT_MAX};
int n, m; scanf("%d%d", &n,&m);
for(int i=0;i<n;i++){
arr[i]=i;
upd(0,n-1, 1, i, i);
}
while(m--){
int p,a,b; scanf("%d%d%d",&p,&a,&b);
if(p==0) {
swap(arr[a], arr[b]);
upd(0,n-1, 1, a, arr[a]);
upd(0,n-1, 1, b, arr[b]);
} else {
pii t=qry(0, n-1, 1, a, b);
if(t.first==a && t.second==b)
printf("YES\n");
else
printf("NO\n");
}
}
}
}
bottom up 스타일의 세그먼트 트리를 구성하면 arr이 필요없으니 메모리가 절약되긴 할 것이다.
반응형
'DS\Algo > Segment Tree' 카테고리의 다른 글
BOJ 1168 요세푸스 문제 2 (0) | 2022.08.23 |
---|---|
BOJ 18436 수열과 쿼리 37 (0) | 2022.08.23 |
BOJ 7578 공장 (0) | 2022.08.13 |
BOJ 13537 수열과 쿼리 1 (Persistent Segment Tree version) (0) | 2022.08.13 |
BOJ 11658 구간 합 구하기 3 (0) | 2022.08.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준
- max flow
- JavaScript
- RUBY
- 다익스트라
- map
- Vim
- bash
- segment tree
- bash script
- Dijkstra
- shell
- python3
- lazy propagation
- Aho-Corasick
- javascript array
- script
- persistent segment tree
- stack
- dynamic programming
- Reference
- 세그먼트 트리
- 정수론
- C++ big number
- fenwick tree
- BOJ
- nearest common ancestor
- Shell Programming
- math font
- number theory
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함