Submission #260677

#TimeUsernameProblemLanguageResultExecution timeMemory
260677A02벽 (IOI14_wall)C++14
24 / 100
328 ms20344 KiB
#include "wall.h" #include <iostream> #include <vector> #include <algorithm> #include <utility> #include <set> using namespace std; int querySegTree(int n, vector<int> &tree, int p){ int result = 0; for (p += n; p > 0; p /= 2){ result = max(tree[p], result); } return result; } void updateSegTree(int n , vector<int> &tree, int l, int r, int t){ l += n; r += n; for (; l < r; l /= 2, r /= 2){ if (l % 2 == 1){ tree[l] = max(tree[l], t); l++; } if (r % 2 == 1){ tree[r - 1] = max(tree[r - 1], t); r--; } } } int querySegTree2(int n, vector<int> &tree, int p){ int result = 100000; for (p += n; p > 0; p /= 2){ result = min(tree[p], result); } return result; } void updateSegTree2(int n , vector<int> &tree, int l, int r, int t){ l += n; r += n; for (; l < r; l /= 2, r /= 2){ if (l % 2 == 1){ tree[l] = min(tree[l], t); l++; } if (r % 2 == 1){ tree[r - 1] = min(tree[r - 1], t); r--; } } } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ vector<int> max_tree (2 * n, 0); vector<int> min_tree (2 * n, 100000); // // updateSegTree(n, max_tree, 2, 7, 10); // updateSegTree(n, max_tree, 3, 5, 12); // // for (int i = 0; i < n; i++){ // cout << querySegTree(n, max_tree, i) << ' '; // } // cout << endl; for (int i = 0; i < k; i++){ if (op[i] == 1){ updateSegTree(n, max_tree, left[i], right[i] + 1, height[i]); } else { updateSegTree2(n, min_tree, left[i], right[i] + 1, height[i]); } } for (int i = 0; i < n; i++){ finalHeight[i] = min(querySegTree(n, max_tree, i), querySegTree2(n, min_tree, i)); //cout << i << ' ' << querySegTree(n, max_tree, i) << ' ' << querySegTree2(n, min_tree, i) << endl; } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...