Submission #117358

#TimeUsernameProblemLanguageResultExecution timeMemory
117358SortingSeats (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...