제출 #50178

#제출 시각아이디문제언어결과실행 시간메모리
50178Just_Solve_The_Problem벽 (IOI14_wall)C++11
32 / 100
2305 ms299672 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, c; set < pii > in[N], er[N]; int a[N]; void buildWall(int nn, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ n = nn; if (n <= 10000 && k <= 5000) { 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 ; } for (int i = 0; i < k; i++) { if (op[i] == 2) break; in[left[i]].insert(mk(height[i], c)); er[right[i] + 1].insert(mk(height[i], c++)); } set < pii > 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() -> fr; } cur.clear(); for (int i = 0; i < k; i++) { if (op[i] == 1) continue; in[left[i]].insert(mk(height[i], c)); er[right[i] + 1].insert(mk(height[i], c++)); } 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.begin() -> fr, 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...