제출 #1049552

#제출 시각아이디문제언어결과실행 시간메모리
1049552SiliconSquared자리 배치 (IOI18_seats)C++14
17 / 100
4053 ms56660 KiB
#include "seats.h"
#define INF 999999999
using namespace std;
#include <vector>
#include <cmath>

int h,w,zz;
vector<int> x;
vector<int> x_;
vector<int> y;
vector<int> y_;
vector<bool> z;
vector<int> r;
vector<int> c;
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
    h=H;
    w=W;
    r=R;
    c=C;
    zz=1;
    x.resize(h*w);
    x_.resize(h*w);
    y.resize(h*w);
    y_.resize(h*w);
    z.resize(h*w,0);
    x[0]=C[0];
    x_[0]=C[0];
    y[0]=R[0];
    y_[0]=R[0];
    z[0]=1;
    for (int i=1;i<h*w;i++){
        x[i]=min(x[i-1],C[i]);//print(x[i]);
        x_[i]=max(x_[i-1],C[i]);//print(x_[i]);
        y[i]=min(y[i-1],R[i]);//print(y[i]);
        y_[i]=max(y_[i-1],R[i]);//print(y_[i]);
        if ((x_[i]+1-x[i])*(y_[i]+1-y[i])==i+1){
            zz++;
            z[i]=1;
        }
    }
}

int swap_seats(int a, int b) {
    if (a>b){swap(a,b);}
    swap(r[a],r[b]);
    swap(c[a],c[b]);
    if (a==0){
        x[0]=c[0];
        x_[0]=c[0];
        y[0]=r[0];
        y_[0]=r[0];
    }
    for (int i=max(a,1);i<b;i++){
        x[i]=min(x[i-1],c[i]);
        x_[i]=max(x_[i-1],c[i]);
        y[i]=min(y[i-1],r[i]);
        y_[i]=max(y_[i-1],r[i]);
        if ((x_[i]+1-x[i])*(y_[i]+1-y[i])==i+1){
            if (z[i]==0){
                zz++;
                z[i]=1;
            }
        }else if (z[i]==1){
            zz--;
            z[i]=0;
        }
    }
    return zz;
}
#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...