티스토리 뷰
#include <stdio.h>
int main(void)
{
int n, m, tmp1, tmp2, first=0, before=0, p=0;
scanf("%d %d", &n, &m);
//연결리스트를 위한 배열
int prev[1000001]={};
int next[1000001]={};
//처음 값 (나중에 마지막값과 연결시켜주기 위해서 따로 저장함
n--;
scanf("%d", &first);
before = first;
//두번째부터
while(n--) {
scanf("%d", &tmp1);
//서로 연결
prev[tmp1]=before;
next[before]=tmp1;
before = tmp1;
}
//마지막값과 처음값 연결
next[before] = first;
prev[first] = before;
//입력을 받기위한 배열
char c[2] = {};
//쿼리 처리
while(m--) {
scanf(" %c%c", &c[0], &c[1]);
scanf("%d", &tmp1);
if(c[0] == 'B') {
scanf("%d", &tmp2);
if(c[1] == 'N') {
p = next[tmp1]; //입력된 곳의 오른 쪽 역
printf("%d\n", p);
prev[p] = tmp2; //오른쪽 역의 왼쪽을 새로운 역으로
next[tmp1] = tmp2; //기존역의 오른쪽을 새로운 역으로
prev[tmp2] = tmp1; //새로운 역의 왼쪽을 기존역으로
next[tmp2] = p; //새로운 역의 오른쪽을 기존역의 오른쪽 역으로
}
else {
p = prev[tmp1]; //입력된 곳의 왼쪽 역
printf("%d\n", p);
next[p] = tmp2; //왼쪽 역의 오른쪽을 새로운 역으로
prev[tmp1] = tmp2; //기존역의 왼쪽을 새로운 역으로
prev[tmp2] = p; //새로운 역의 왼쪽을 왼쪽역으로
next[tmp2] = tmp1; //새로운 역의 오른쪽을 기존역으로
}
}
else {
if(c[1] == 'N') {
p = next[tmp1]; //입력된 곳의 오른쪽 역
printf("%d\n", p);
//입력된 곳의 오른쪽역의 오른쪽 역과, 입력된 곳을 연결
next[tmp1] = next[p];
prev[next[p]] = tmp1;
}
else {
p = prev[tmp1];
printf("%d\n", p);
//입력된 곳의 왼쪽역의 왼쪽 역과, 입력된 곳을 연결
prev[tmp1] = prev[p];
next[prev[p]] = tmp1;
}
}
}
}
풀이 : 연결 리스트
시간초과를 피하기 위해서 STL list가 아닌
배열을 이용한 연결리스트를 이용했습니다
특정 요소에 접근할 때
std::find()는 O(1)보다 더욱 오래 걸리나
배열을 이용하게 되면, 특정 원소에 대해서 O(1)로 접근할 수 있습니다.
https://www.acmicpc.net/problem/23309
23309번: 철도 공사
첫 번째 줄에 공사를 시작하기 이전에 있는 역의 개수를 나타내는 양의 정수 $N$과 공사 횟수를 나타내는 양의 정수 $M$이 주어진다. ($1 \le N \le 500\,000$, $1 \le M \le 1\,500\,000$) 두 번째 줄에는 공사
www.acmicpc.net
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 14940번 쉬운 최단거리 (백준) (0) | 2023.08.22 |
---|---|
c언어 10799번 쇠막대기 (백준) (0) | 2023.08.20 |
c언어 1451번 직사각형으로 나누기 (백준) (0) | 2023.08.15 |
c언어 28070번 유니의 편지 쓰기 (백준) (0) | 2023.08.15 |
c언어 25634번 전구 상태 뒤집기 (백준) (0) | 2023.08.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Lazy Propagation
- 플로이드
- 1835
- 백준
- DFS
- 덱
- XOR
- 그래프
- 스택
- find
- 기하학
- Segment Tree
- C언어
- 정렬
- 세그먼트 트리
- 최대공약수
- java
- union
- 누적합
- C++
- 최소 스패닝 트리
- 브루트포스
- Krustal
- DP
- BFS
- PASCAL
- 1835번
- 오프라인 쿼리
- 누적 합
- 그리디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함