Submission #1330717

#TimeUsernameProblemLanguageResultExecution timeMemory
1330717MuhammadSaramSeats (IOI18_seats)C++20
0 / 100
4096 ms43316 KiB
#include "seats.h"
#include <bits/stdc++.h>

using namespace std;

const int M = 1e6 + 1;

vector<int> r[2];
int mn[M][2], mx[M][2], val[M], ans;

void ver(int x)
{
	ans-=val[x], val[x]=0;
	if ((mx[x][0]-mn[x][0]+1)*(mx[x][1]-mn[x][1]+1)==x+1) val[x]=1;
	ans+=val[x];
}

void give_initial_chart(int h, int w, vector<int> R, vector<int> C)
{
	r[0] = R, r[1]=C;
	mn[0][0]=mx[0][0]=r[1][0], mn[0][1]=mx[0][1]=r[1][0];
	ver(1);
	for (int i=1;i<h*w;i++)
	{
		for (int j=0;j<=1;j++)
			mn[i][j]=min(mn[i-1][j],r[j][i]), mx[i][j]=max(mx[i-1][j],r[j][i]);
		ver(i);
	}
}

int swap_seats(int a, int b)
{
	swap(r[0][a],r[0][b]), swap(r[1][a],r[1][b]);
	if (!a)
	{
		for (int j=0;j<=1;j++) mn[0][j]=mx[0][j]=r[j][0];
	}
	else
	{
		for (int j=0;j<=1;j++)
			mn[a][j]=min(mn[a-1][j],r[j][a]), mx[a][j]=max(mx[a-1][j],r[j][a]);
	}
	ver(a);
	for (int i=a+1;i<=b;i++)
		for (int j=0;j<=1;j++)
			mn[i][j]=min(mn[i-1][j],r[j][i]), mx[i][j]=max(mx[i-1][j],r[j][i]), ver(i);
	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...