Submission #991382

#TimeUsernameProblemLanguageResultExecution timeMemory
991382ForestedSeats (IOI18_seats)C++17
17 / 100
563 ms64716 KiB
#include <bits/stdc++.h> #define OVERRIDE4(a, b, c, d, ...) d #define REP2(i, n) for (i32 i = 0; i < (i32)(n); ++i) #define REP3(i, l, r) for (i32 i = (i32)(l); i < (i32)(r); ++i) #define REP(...) OVERRIDE4(__VA_ARGS__, REP3, REP2)(__VA_ARGS__) #define PER2(i, n) for (i32 i = (i32)(n) - 1; i >= 0; --i) #define PER3(i, l, r) for (i32 i = (i32)(r) - 1; i >= (i32)(l); --i) #define PER(...) OVERRIDE4(__VA_ARGS__, PER3, PER2)(__VA_ARGS__) #define LEN(x) (i32)(x).size() #define ALL(x) begin(x), end(x) using namespace std; using i32 = int; using i64 = long long; template <typename T> using V = vector<T>; template <typename T> bool chmin(T &x, const T &y) { if (x > y) { x = y; return true; } return false; } template <typename T> bool chmax(T &x, const T &y) { if (x < y) { x = y; return true; } return false; } #include "seats.h" using Rect = tuple<i32, i32, i32, i32>; i32 h, w; V<i32> r, c; V<Rect> rect; i32 ans; i32 get_size(const Rect &rect) { auto [u, d, l, r] = rect; return (d - u) * (r - l); } Rect add_point(const Rect &rect, i32 x, i32 y) { auto [u, d, l, r] = rect; chmin(u, x); chmax(d, x + 1); chmin(l, y); chmax(r, y + 1); return Rect(u, d, l, r); } void give_initial_chart(i32 _h, i32 _w, V<i32> _r, V<i32> _c) { h = _h; w = _w; r = _r; c = _c; rect.resize(h * w); rect[0] = Rect(r[0], r[0] + 1, c[0], c[0] + 1); REP(i, 1, h * w) { rect[i] = add_point(rect[i - 1], r[i], c[i]); } ans = 1; REP(i, h * w - 1) { if (get_size(rect[i]) == i + 1) { ++ans; } } } i32 swap_seats(i32 a, i32 b) { if (a > b) { swap(a, b); } assert(b - a <= 10000); REP(i, a, b) { if (get_size(rect[i]) == i + 1) { --ans; } } swap(r[a], r[b]); swap(c[a], c[b]); REP(i, a, b) { if (i == 0) { rect[i] = Rect(r[i], r[i] + 1, c[i], c[i] + 1); } else { rect[i] = add_point(rect[i - 1], r[i], c[i]); } if (get_size(rect[i]) == i + 1) { ++ans; } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...