#include #include #include using namespace std; int main(void) { int n, q, k; scanf("%d %d %d", &n, &q, &k); //쿼리들을 저장할 배열 v[][] 왼쪽으로는 0번쿼리를 저장, 오른쪽으로는 1,2번쿼리를 저장 int v[q][2], left = 0, right = q-1, cnt = 0; deque deq; //나중에 사용할 덱 for(int i=0; i j) { //0번쿼리(삽입) if(out) deq.push_back(v[j][0]); else deq.push_front(v[j][0]); j++; } if(v[i][0] == 1) { //1번 쿼리 sort(deq.begin(), deq.end()); //오름차순 정렬 ..
#include #include #include using namespace std; int arr[100001]; vector tree[400001]; void update(int s, int e, int node, int index, int val) { //merge sort tree 수정 if(s > index || e < index) return; tree[node].push_back(val); if(s == e) return; int m = (s+e)/2; update(s, m, node*2, index, val); update(m+1, e, node*2+1, index, val); } int find(int s, int e, int node, int l, int r, int key) { //m..
import java.util.Scanner; public class Main { public static void main(String[] args) { int n, m; Scanner scan = new Scanner(System.in); n = scan.nextInt(); //배열의 요소의 개수 int[] sort = new int[n]; //배열 생성 for(int i=0; i>= 1; } int left=1, right=0, ans=0, flag = 0; //좋은 구간의 왼쪽값, 오른쪽 값, 범위의 개수, 오른쪽값의 갱신여부 if(sort[n-1] < m) ans = -1; //만약 입력 받은 수 보다 특별한 수가 for(i=0; i= 0 && right != 0) { //좋은 구간 구하기 an..
#include //한점에서 가장 가까운점끼리 연결하는 것이 최소 스패닝 트리를 만들 수 있습니다 //한점은 x축을 기준으로 2곳, y축을 기준으로 2곳, z축을 기준으로 2곳의 가까운 점이 있다고 볼 수 있으며, //위의 모든 경우를 하나의 간선들로 만든다음, 간선들을 가중치 값으로 오름차순하여 정렬합니다 //정렬한 간선들로 최소 스패닝 트리를 위해, Krustal 알고리즘을 사용합니다. typedef struct Node { int x; int y; int z; int num; }Node; int ab(int x) { if(x=1; } } void shellY(Node in[], int n) { int i,j, gap = n/2; Node key; while(1) { if(gap%2 == 0) gap..
#include #define MAX_SIZE 100000 //우선순위 큐를 배열을 이용한 최소힙으로 구현했기에, 미리 배열의 크기를 지정해 주었다. //여기서 힙정렬의 시작을 0으로 했습니다. void swap(int *x, int *y) { //swap 함수 int tmp = *x; *x = *y; *y = tmp; } typedef struct PriorityQueue { //최소힙으로 만든 우선순위 큐 int heap[MAX_SIZE]; //힙을 이룰 배열 int cnt; //우선순위 큐에 있는 요소들의 개수 }PriorityQueue; void push(PriorityQueue *q, int data) { //큐에 집어넣기 -> 집어넣으면 최소힙으로 정렬된다. q->heap[q->cnt] = d..
#include int main(void) { int n = 0; //입력 int tmp = -1; scanf("%d", &n); long long int a[n][2]; while(++tmp < n) scanf("%lld %lld", &a[tmp][0], &a[tmp][1]); int key0, key1, i, j; //shell sort int gap = n/2; while(1) { if(gap%2==0) gap++; for(i = gap; i=0; j-=gap) { if(key0 < a[j][0]) { a[j+gap][0] = a[j][0]; a[j+gap][1] = a[j][1]; } else break; } a[j+gap][0] = key0; a[j+gap][1] = key1; } if(gap ..
- Total
- Today
- Yesterday
- 최대공약수
- 카드
- 스택
- 최소 스패닝 트리
- 6198
- 그리디
- 6198번
- C++
- 트리
- 1835번
- 누적합
- BFS
- DP
- 세그먼트 트리
- 1835
- union
- 플로이드
- 백준
- 16120번
- 누적 합
- Mo.s
- DFS
- java
- 오프라인 쿼리
- Krustal
- find
- 덱
- C언어
- 정렬
- 그래프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |