제출 #1037277

#제출 시각아이디문제언어결과실행 시간메모리
1037277Ludissey자리 배치 (IOI18_seats)C++17
0 / 100
4029 ms94440 KiB
#include "seats.h"
#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
using namespace std;

vector<vector<int>> grid;
unordered_map<int,pair<int,int>> pos;
vector<pair<pair<int,int>,pair<int,int>>> sq;
int init_cnt=0;
vector<bool> cnt;
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C){
    grid.resize(H,vector<int>(W));
    sq.resize(W*H);
    cnt.resize(W*H);
    for (int i = 0; i < H*W; i++)
    {
        grid[R[i]][C[i]]=i;
        pos[i]={R[i],C[i]};
    }
    int mxR=0, mnL=1e9;
    int mnH=1e9, mxD=0;
    for (int i = 0; i < H*W; i++)
    {
        mxR=max(C[i],mxR);
        mxD=max(R[i],mxD);
        mnL=min(C[i],mnL);
        mnH=min(R[i],mnH);
        int sz=(mxR-mnL+1)*(mxD-mnH+1);
        if(sz<=i+1) { init_cnt++; cnt[i]=true; } 
        sq[i]={{mnL,mxR},{mnH,mxD}};
    }
}
int swap_seats(int a, int b){
    if(b<a) swap(a,b);
    pair<int,int> posA=pos[a];
    grid[pos[a].first][pos[a].second]=a;
    grid[pos[b].first][pos[b].second]=b;
    pos[a]=pos[b];
    pos[b]=posA;
    int mxR=0, mnL=1e9;
    int mnH=1e9, mxD=0;
    if(a>0){
        mxR=sq[a].first.first;
        mnL=sq[a].first.second;
        mnH=sq[a].second.first;
        mxD=sq[a].second.second;
    }

    for (int i = a; i <= b; i++)
    {
        init_cnt-=cnt[i];
        cnt[i]=0;
        mxR=max(pos[i].second,mxR);
        mxD=max(pos[i].first,mxD);
        mnL=min(pos[i].second,mnL);
        mnH=min(pos[i].first,mnH);
        int sz=(mxR-mnL+1)*(mxD-mnH+1);
        if(sz<=i+1) { init_cnt++; cnt[i]=true; } 
        sq[i]={{mnL,mxR},{mnH,mxD}};
    }
    return init_cnt;
}
#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...