제출 #1014785

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

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<int,int,int> tii;

#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define LSOne(s) ((s)&(-s))

ll INF=1e18+10;
int inf=1e9+10;
ll M=1e9+7;

pii arr;
int n,m;
vi p;
int ans;
vi minx,miny,maxx,maxy;

void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
  REP(i,0,H*W)arr.PB({R[i],C[i]});
  n=H;m=W;
  p.resize(n*m+1,0);
  minx.resize(n*m+1,arr[0].F);
  maxx.resize(n*m+1,arr[0].F);
  miny.resize(n*m+1,arr[0].S);
  maxy.resize(n*m+1,arr[0].S);
  ans=1;
  p[0]=1;
  int x1=arr[0].F,x2=arr[0].F,y1=arr[0].S,y2=arr[0].S;
  REP(i,1,n*m){
    x1=min(x1,arr[i].F);minx[i]=x1;
    x2=max(x2,arr[i].F);maxx[i]=x2;
    y1=min(y1,arr[i].S);miny[i]=y1;
    y2=max(y2,arr[i].S);maxy[i]=y2;
    if(i+1==(y2-y1+1)*(x2-x1+1)){
      ans++;
      p[i]=1;
    }
  }
}

int swap_seats(int a, int b) {
  swap(arr[a],arr[b]);
  if(a>b)swap(a,b);
  int x1,x2,y1,y2;
  if(a>0)x1=minx[a-1],x2=maxx[a-1],y1=miny[a-1],y2=maxy[a-1];
  else x1=arr[0].F,x2=arr[0].F,y1=arr[0].S,y2=arr[0].S;
  REP(i,a,b){
    x1=min(x1,arr[i].F);
    x2=max(x2,arr[i].F);
    y1=min(y1,arr[i].S);
    y2=max(y2,arr[i].S);
    if(i+1==(y2-y1+1)*(x2-x1+1)){
      if(p[i]==1)continue;
      else p[i]=1;
      ans++;
    }
    else{
      if(p[i]==0)continue;
      p[i]=0;
      ans--;
    }
  }
  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...