제출 #113899

#제출 시각아이디문제언어결과실행 시간메모리
113899antimirage자리 배치 (IOI18_seats)C++14
17 / 100
4075 ms51348 KiB
#include "seats.h"
#include <bits/stdc++.h>
//#include "grader.cpp"

#define fr first
#define sc second
#define mk make_pair
#define pb push_back
#define all(s) s.begin(), s.end()

using namespace std;

const int N = 1e6 + 5;

int ans, mn_x[N], mx_x[N], mn_y[N], mx_y[N], fl[N];

vector <int> r, c;

void give_initial_chart(int n, int m, vector<int> R, vector<int> C) {

	r = R;
	c = C;
	
	for (int i = 0; i < n * m; i++)
	{
		mn_x[i] = 1e9;
		mn_y[i] = 1e9;
		mx_x[i] = -1e9;
		mx_y[i] = -1e9;
	
		if (i == 0){
			mn_x[i] = r[i], mx_x[i] = r[i];
			mn_y[i] = c[i], mx_y[i] = c[i];
		}
		else{
			mn_x[i] = min(mn_x[i - 1], r[i]), mx_x[i] = max(mx_x[i - 1], r[i]);
			
			mn_y[i] = min(mn_y[i - 1], c[i]), mx_y[i] = max(mx_y[i - 1], c[i]);
		}
	
		if ( (mx_x[i] - mn_x[i] + 1) * 1ll * (mx_y[i] - mn_y[i] + 1) == i + 1 )
			fl[i] = 1, ans++;
	}
}

int swap_seats(int a, int b) {
	
	if (a > b) swap(a, b);
	
	swap(r[a], r[b]);
	swap(c[a], c[b]);
	
	for (int i = a; i <= b; i++)
	{
		if (i == 0){
			mn_x[i] = r[i], mx_x[i] = r[i];
			mn_y[i] = c[i], mx_y[i] = c[i];
		}
		else{
			mn_x[i] = min(mn_x[i - 1], r[i]), mx_x[i] = max(mx_x[i - 1], r[i]);
			mn_y[i] = min(mn_y[i - 1], c[i]), mx_y[i] = max(mx_y[i - 1], c[i]);
		}
		if ( (mx_x[i] - mn_x[i] + 1) * 1ll * (mx_y[i] - mn_y[i] + 1) == i + 1 ){
			
			if (fl[i] == 0){
				fl[i] = 1, ans++;
			}
		}
		else{
			if ( fl[i] == 1 ){
				fl[i] = 0, 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...