This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "seats.h"
#include <bits/stdc++.h>
#define chmin(x, v) x = min(x, v)
#define chmax(x, v) x = max(x, v)
using namespace std;
struct Extremums {
int xMin, xMax, yMin, yMax;
};
struct Point {
int x, y;
};
int nLigs, nCols, nVals;
const int MAX_VALS = 1e6 + 1;
Extremums vals[MAX_VALS];
bool estOk[MAX_VALS];
Point points[MAX_VALS];
int sum = 0;
void construire(int iVal){
if (iVal == 0){
vals[0] = {points[0].x, points[0].x, points[0].y, points[0].y};
return;
}
vals[iVal] = vals[iVal - 1];
chmin(vals[iVal].xMin, points[iVal].x);
chmax(vals[iVal].xMax, points[iVal].x);
chmin(vals[iVal].yMin, points[iVal].y);
chmax(vals[iVal].yMax, points[iVal].y);
int aire = (vals[iVal].xMax - vals[iVal].xMin + 1) * (vals[iVal].yMax - vals[iVal].yMin + 1);
sum -= estOk[iVal];
if (aire == iVal + 1)
estOk[iVal] = true;
else
estOk[iVal] = false;
sum += estOk[iVal];
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
nLigs = H;
nCols = W;
nVals = nLigs * nCols;
for (int iVal = 0; iVal < nVals; ++iVal)
points[iVal] = {R[iVal], C[iVal]};
vals[0] = {points[0].x, points[0].x, points[0].y, points[0].y};
estOk[0] = true; sum++;
for (int iVal = 1; iVal < nVals; ++iVal)
construire(iVal);
}
int swap_seats(int a, int b) {
swap(points[a], points[b]);
for (int iVal = 0; iVal < nVals; ++iVal)
construire(iVal);
return sum;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |