본문 바로가기

공부합시다

외판원순회 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() #define MAXV 987654321 using namespace std; using i64 = long long int; using ii = pair; using iis = pair; using ii64 = pair; using iii = tuple; i.. 더보기
세그먼트 트리 마주하고 말았다. 세그먼트 트리 세그먼트 트리 구간을 반복해서 2등분 한 뒤 각각의 잘린 구간이 자신의 구간인 대푯값을 저장하고 관리하게 만드는 자료구조 query: O(logN) update: O(logN) query는 정확히는 O(2logN) 레벨당 2개의 노드만 건드리게 된다. 구현 full binary tree 형태를 가지기 때문에 힙처럼 구간의 모든 값을 배열에 저장할 수 있다. 어떤 노드의 번호가 idx면 왼쪽 자식은 2 * idx, 오른쪽 자식은 2 * idx + 1 배열의 크기는 4 * n 이상으로 설정해야 한다 int query(int l, int r, int node, int nodeL, int nodeR) { if (l nodeR) return v[node]; if (nodeL == .. 더보기
플로이드 와샬 알고리즘 https://m.blog.naver.com/PostView.naver?blogId=kks227&logNo=220797649276&referrerCode=0&searchKeyword=%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%93%9C 플로이드 와샬 알고리즘(Floyd-Warshall Algorithm) 마지막으로 알려드릴 최단경로 알고리즘입니다. 참 많기도 하죠. 이번엔 플로이드 와샬 알고리즘(Floyd-W... blog.naver.com 아직 전부 이해는 못했지만.. - 모든 정점 쌍 사이의 최단 경로를 한번에 구할 수 있다 - 시간복잡도 O(V^3) - i, j, k - i번 정점에서 j번 정점까지, 1~k번 정점만 사용할 떄의 최단 거리를 구하라 - dist에는 1 ~ k-1번 정점만.. 더보기
순열 void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void permutation(vector &v, int depth, int n, int r) { if (depth == r) { for(int i = 0; i < r; i++) cout 더보기
offset 대신 포인터로 사용하기 int _arr[20005]; int* arr = _arr + 10000; arr[-10] = 6; 북님 꿀팁 백업하기 더보기
중복순열 #include #include using namespace std; void repeatPermutation(vector vec, vector perm, int depth) { if (depth == perm.size()) { for(int i = 0; i < perm.size(); i++) { cout 더보기
c++ 한 줄 입력 getline(cin, str); 더보기
중복제거 sort(arr.begin(), arr.end()); arr.erase(unique(arr.begin(), arr.end()), arr.end()); 더보기