제출 #117358

#제출 시각아이디문제언어결과실행 시간메모리
117358Sorting자리 배치 (IOI18_seats)C++14
17 / 100
4083 ms55544 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 7; pair<int, int> p[N], mx[N], mn[N]; int h, w; int ans = 0; void give_initial_chart(int H, int W, vector<int> R, vector<int> C){ h = H; w = W; for(int i = 0; i < (int)R.size(); i++){ p[i].first = R[i]; p[i].second = C[i]; } mx[0].first = p[0].first; mx[0].second = p[0].second; mn[0].first = p[0].first; mn[0].second = p[0].second; ans++; for(int i = 1; i < H * W; i++){ mx[i].first = max(mx[i - 1].first, p[i].first); mx[i].second = max(mx[i - 1].second, p[i].second); mn[i].first = min(mn[i - 1].first, p[i].first); mn[i].second = min(mn[i - 1].second, p[i].second); if((mx[i].first - mn[i].first + 1) * (mx[i].second - mn[i].second + 1) == i + 1){ ans++; } } } int swap_seats(int a, int b){ swap(p[a], p[b]); if(a > b){ swap(a, b); } for(int i = a; i <= b; i++){ if((mx[i].first - mn[i].first + 1) * (mx[i].second - mn[i].second + 1) == i + 1){ ans--; } if(i){ mx[i].first = max(mx[i - 1].first, p[i].first); mx[i].second = max(mx[i - 1].second, p[i].second); mn[i].first = min(mn[i - 1].first, p[i].first); mn[i].second = min(mn[i - 1].second, p[i].second); } else{ mx[0].first = p[0].first; mx[0].second = p[0].second; mn[0].first = p[0].first; mn[0].second = p[0].second; } if((mx[i].first - mn[i].first + 1) * (mx[i].second - mn[i].second + 1) == 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...