Submission #50167

#TimeUsernameProblemLanguageResultExecution timeMemory
50167Just_Solve_The_ProblemWall (IOI14_wall)C++11
0 / 100
194 ms188396 KiB
#include <bits/stdc++.h> #include "wall.h" #define pb push_back #define eb emplace_back #define ll long long #define pii pair < int, int > #define fr first #define sc second #define mk make_pair #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() #define ok puts("ok"); #define whatis(x) cerr << #x << " = " << x << endl; #define pause system("pause"); #define random (rand() ^ (rand() << 15)) using namespace std; const int N = (int)2e6 + 7; int n; set < int > in[N], er[N]; int a[N]; void buildWall(int nn, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ if (n <= 10000) { for (int i = 0; i < k; i++) { for (int j = left[i]; j <= right[i]; j++) { if (op[i] == 1) { a[j] = max(a[j], height[i]); } else { a[j] = min(a[j], height[i]); } } } for (int i = 0; i < n; i++) { finalHeight[i] = a[i]; } return ; } n = nn; for (int i = 0; i < k; i++) { if (op[i] == 2) break; in[left[i]].insert(height[i]); er[right[i] + 1].insert(height[i]); } set < int > cur; for (int i = 0; i < n; i++) { for (auto to : er[i]) cur.erase(to); for (auto to : in[i]) cur.insert(to); in[i].clear(); er[i].clear(); if (cur.empty()) continue; a[i] = *cur.rbegin(); } cur.clear(); for (int i = 0; i < k; i++) { if (op[i] == 1) continue; in[left[i]].insert(height[i]); er[right[i] + 1].insert(height[i]); } for (int i = 0; i < n; i++) { for (auto to : er[i]) cur.erase(to); for (auto to : in[i]) cur.insert(to); in[i].clear(); er[i].clear(); if (cur.empty()) continue; a[i] = min(*cur.rbegin(), a[i]); } for (int i = 0; i < n; i++) { finalHeight[i] = a[i]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...