제출 #765213

#제출 시각아이디문제언어결과실행 시간메모리
765213ono_de206자리 배치 (IOI18_seats)C++14
17 / 100
4021 ms60336 KiB
#include "seats.h" #include<bits/stdc++.h> using namespace std; #define in insert #define all(x) x.begin(),x.end() #define pb push_back #define eb emplace_back #define ff first #define ss second #define x first #define y second const int mxn = 1e6 + 10; int n, m, k, ans; int dp[mxn]; pair<int, int> p[mxn]; pair<pair<int, int>, pair<int, int>> rec[mxn]; void mnn(int &x, int y) { if(x > y) x = y; } void mxx(int &x, int y) { if(x < y) x = y; } void give_initial_chart(int H, int W, vector<int> R, vector<int> C) { n = H; m = W; k = R.size(); for(int i = 0; i < k; i++) { p[i + 1] = {R[i], C[i]}; } rec[0] = {{1e9, 1e9}, {-1e9, -1e9}}; for(int i = 1; i <= k; i++) { rec[i] = rec[i - 1]; mnn(rec[i].ff.x, p[i].x); mnn(rec[i].ff.y, p[i].y); mxx(rec[i].ss.x, p[i].x); mxx(rec[i].ss.y, p[i].y); if((rec[i].ss.x - rec[i].ff.x + 1) * (rec[i].ss.y - rec[i].ff.y + 1) == i) ans++, dp[i] = 1; } } int swap_seats(int a, int b) { a++; b++; if(a > b) swap(a, b); swap(p[a], p[b]); for(int i = a; i <= b; i++) { ans -= dp[i]; dp[i] = 0; rec[i] = rec[i - 1]; mnn(rec[i].ff.x, p[i].x); mnn(rec[i].ff.y, p[i].y); mxx(rec[i].ss.x, p[i].x); mxx(rec[i].ss.y, p[i].y); if((rec[i].ss.x - rec[i].ff.x + 1) * (rec[i].ss.y - rec[i].ff.y + 1) == i) ans++, dp[i] = 1; } 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...