제출 #1354782

#제출 시각아이디문제언어결과실행 시간메모리
1354782settop자리 배치 (IOI18_seats)C++20
17 / 100
4094 ms40796 KiB
#include "seats.h"
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define sz(x) (int)x.size()
#define F first
#define S second
const int MAXN=1e6+10;

typedef pair<int,int> pii;

int ans;
bool mark[MAXN];
vector<pii> v;
vector<int> mx[2],mn[2];

int f(int i){
  return (mx[0][i]-mn[0][i]+1)*(mx[1][i]-mn[1][i]+1);
}

void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
    v.resize(W*H); 
    fall(i,0,1) mx[i].resize(W*H),mn[i].resize(W*H,W*H);
    fall(i,0,H*W-1){
      v[i]={R[i],C[i]};
      mx[0][i]=mn[0][i]=v[i].F;
      mx[1][i]=mn[1][i]=v[i].S;
      if(i){
        fall(j,0,1) mx[j][i]=max(mx[j][i],mx[j][i-1]),mn[j][i]=min(mn[j][i],mn[j][i-1]);
      }
      if(f(i)==i+1) ans++,mark[i]=1;
    }
    return;
}

int swap_seats(int a, int b){
    swap(v[a],v[b]);
    if(a>b) swap(a,b);
    fall(i,a,b){
      ans-=(mark[i]),mark[i]=0;
      mx[0][i]=mn[0][i]=v[i].F;
      mx[1][i]=mn[1][i]=v[i].S;
      if(i){
        fall(j,0,1) mx[j][i]=max(mx[j][i],mx[j][i-1]),mn[j][i]=min(mn[j][i],mn[j][i-1]);
      }
      if(f(i)==i+1) ans++,mark[i]=1;
    }
    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...