--- tags: IOICamp --- # IOICamp Day2 上午 - 資料結構初階 [題目統整](https://vjudge.net/contest/353035) $\mathcal{AND}$ [slide](https://hackmd.io/@xQGCDZGPSKutcn2ux55kvA/ByUQLSlW8#/) [TOC] ## array 的四種寫法 ```cpp= /// array /// const int N = 1e6 + 5; int arr1[N]; // set to 0 by default int arr2[1'103'255]; // single quote separator (since C++ 14) fill_n(arr1, N, 1e9); memset(arr2, 0xab, sizeof(arr2)); // set every byte to 0xab int arr3[N] = {}; // set to 0 by default int *ptr1 = arr1, *ptr2 = arr2; assert(ptr1[0] == 1e9 and ptr2[0] == 0xabababab); swap(ptr1, ptr2); assert(ptr2[0] == 1e9 and ptr1[0] == 0xabababab); ptr1 = new int[N](); // set to 0 by default /*-----------------------------------------------------------*/ /// std::vector /// vector<int> v1(N, 100); auto v2 = v1; v1.assign(1450145, 0x12345678); // set size to 1450145 and value to 0x12345678 v2.resize(1450145, 0x12345678); // set size to 1450145 and the extended ones set to 0x12345678, others left untouched swap(v1, v2); // O(1) v1.swap(v2); // O(1) /*-----------------------------------------------------------*/ /// std::array /// array<double, N> a1, a2; a1.fill(8.7); a2.fill(6.5); swap(a1, a2); // O(1) /*-----------------------------------------------------------*/ ``` ## stack - LIFO - DFS - 括號匹配 **[例. Largest Rectangle in a histogram (POJ 2559)](http://poj.org/problem?id=2559)** ## queue - FIFO - DFS **[例. Fire! (UVa 11624)](https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2671)** ## deque - push_front - push_back - pop_front - pop_back - 可以取代 stack 或 queue **[例. 簡單易懂的現代都市 (TIOJ 1566)](https://tioj.ck.tp.edu.tw/problems/1566)** [\\CSY教我/](https://csy54.github.io/2019/02/TIOJ-1566/) ## priority queue - 以 binary heap 實作 - Dijkstra's algorithm **[例. Full Tank? (UVa 11367)](https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2352)** ## DSU - maintains a partition of a finite set **[例. Anansi's Cobweb (Ural 1671)](https://acm.timus.ru/problem.aspx?space=1&num=1671)** ## Segment Tree 一般而言,線段樹都會包含三個主要的 function: - build - modify - query **[例. Interval Product (UVa 12532)](https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3977)** ## Fenwick Tree - Binary Indexed Tree - BIT ## Treap