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>
using namespace std;
typedef vector<int> vi;
int W,H;
vi R,C;
bitset<1000000> good;
int range[4][1000000];
int total=0;
int comp(int t, int a, int b) {
if((t&1)==0) return min(a,b);
return max(a,b);
}
void give_initial_chart(int h, int w, vi r, vi c) {
W=w;
H=h;
R=r;
C=c;
for(int i=0; i<W*H; i++) {
for(int j=0; j<4; j++) {
if(i) range[j][i]=comp(j,range[j][i-1],j<2 ? R[i] : C[i]);
else range[j][i]=j<2 ? R[i] : C[i];
}
if((range[1][i]-range[0][i]+1)*(range[3][i]-range[2][i]+1)==i+1) {
good[i]=true;
total++;
//cout << "good " << i << endl;
}
}
//cout << total << endl;
}
int swap_seats(int a, int b) {
if(a>b) {a^=b;b^=a;a^=b;};
int r1,c1,r2,c2;
r1=R[a];
c1=C[a];
r2=R[b];
c2=C[b];
R[a]=r2;
C[a]=c2;
R[b]=r1;
C[b]=c1;
for(int i=a; i<=b; i++) {
for(int j=0; j<4; j++) {
if(i) range[j][i]=comp(j,range[j][i-1],j<2 ? R[i] : C[i]);
else range[j][i]=j<2 ? R[i] : C[i];
}
if(((range[1][i]-range[0][i]+1)*(range[3][i]-range[2][i]+1)==i+1) ^ good[i]) {
good[i]=good[i]^true;
total=total-1+2*good[i];
//cout << "changed " << i << endl;
}
}
return total;
}
# | 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... |