제출 #1239004

#제출 시각아이디문제언어결과실행 시간메모리
1239004noyancanturk자리 배치 (IOI18_seats)C++20
0 / 100
3302 ms39488 KiB
#include "seats.h"
#include<bits/stdc++.h>
using namespace std;

const int lim=1e6+100;

int n,h,w;

vector<int>r,c;

int ok[lim];
  int ans=0,mxc[lim],mxr[lim],mnr[lim],mnc[lim];

void give_initial_chart(int H,int W,vector<int>R,vector<int>C){
  n=H*W;
  h=H;
  w=W;
  r=R,c=C;
  for(int i=0;i<n;i++){
    mxc[i]=mnc[i]=c[i];
    mxr[i]=mnr[i]=r[i];
    if(i){
      mxc[i]=max(mxc[i],mxc[i-1]);
      mxr[i]=max(mxr[i],mxr[i-1]);
      mnc[i]=min(mnc[i],mnc[i-1]);
      mnr[i]=min(mnr[i],mnr[i-1]);
    }
    if(i+1==(mxc[i]-mnc[i]+1)*(mxr[i]-mnr[i]+1)){
      ok[i]=1;
      ans++;
    }
  }
}

int swap_seats(int x,int y){
  swap(r[x],r[y]);
  swap(c[x],c[y]);
  for(int i=max(0,x-5);i<=min(n,y+5);i++){
    mxc[i]=mnc[i]=c[i];
    mxr[i]=mnr[i]=r[i];
    if(i){
      mxc[i]=max(mxc[i],mxc[i-1]);
      mxr[i]=max(mxr[i],mxr[i-1]);
      mnc[i]=min(mnc[i],mnc[i-1]);
      mnr[i]=min(mnr[i],mnr[i-1]);
    }
    if(i+1==(mxc[i]-mnc[i]+1)*(mxr[i]-mnr[i]+1)){
      ans+=1-ok[i];
      ok[i]=1;
    }else{
      ans-=ok[i];
      ok[i]=0;
    }
  }
  return ans;
}

// std::vector<int> r;

// void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
//   r = R;
// }

// int swap_seats(int a, int b) {
//   return r[a];
// }
#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...