이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "seats.h"
#include <iostream>
using namespace std;
const int MX = 1e6+5;
vector<int> pos(MX);
int n = 0;
vector<int> rmin(MX,0);
vector<int> rmax(MX,0);
vector<long long> temp_ans(MX,0);
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
n = W;
for(int i=0;i<W;i++)pos[i] = R[i];
rmin[0]=rmax[0]=pos[0];
for(int i=1;i<n;i++){
rmin[i] = min(rmin[i-1],pos[i]);
rmax[i] = max(rmax[i-1],pos[i]);
}
long long ans = 0;
for(int i=0;i<n;i++){
int box_size = (rmax[i]-rmin[i]+1);
// cout << "{" << rmin[i] << "," << rmax[i] << "} {" << cmin[i] << "," << cmax[i] << "} " << box_size << " " << i+1 << endl;
if(i+1 == box_size){
ans++;
temp_ans[i] = ans;
}
}
}
int swap_seats(int a, int b) {
swap(pos[a],pos[b]);
long long ans = 0;
if(a==0){
rmin[0]=rmax[0]=pos[0];
}else{
ans = temp_ans[a-1];
}
for(int i=max(a,1);i<=b;i++){
rmin[i] = min(rmin[i-1],pos[i]);
rmax[i] = max(rmax[i-1],pos[i]);
}
// cout << endl;
int change = -temp_ans[b];
for(int i=a;i<=b;i++){
int box_size = (rmax[i]-rmin[i]+1);
// cout << "{" << rmin[i] << "," << rmax[i] << "} {" << cmin[i] << "," << cmax[i] << "} " << box_size << " " << i+1 << endl;
if(i+1 == box_size){
ans++;
change ++;
temp_ans[i] = ans;
}
}for(int i=b+1;i<n;i++)temp_ans[i]+=change;
// cout << " ans = " << ans << endl << endl;
return temp_ans[n-1];
}
# | 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... |