제출 #284107

#제출 시각아이디문제언어결과실행 시간메모리
284107peti1234자리 배치 (IOI18_seats)C++17
17 / 100
4078 ms56568 KiB
#include <bits/stdc++.h>
using namespace std;

const int c=1000002;
int n, m, sor[c], oszlop[c], db, kiss[c], nagys[c], kiso[c], nagyo[c];
bool jo[c];



int swap_seats(int a, int b) {
    if (a>b) swap(a, b);
    swap(sor[a], sor[b]), swap(oszlop[a], oszlop[b]);
    for (int i=a; i<b; i++) {
        if (i==0) kiss[0]=sor[0], nagys[0]=sor[0], kiso[0]=oszlop[0], nagyo[0]=oszlop[0];
        else kiss[i]=min(kiss[i-1], sor[i]), nagys[i]=max(nagys[i-1], sor[i]), kiso[i]=min(kiso[i-1], oszlop[i]), nagyo[i]=max(nagyo[i-1], oszlop[i]);
        db-=jo[i], jo[i]=0;
        if ((nagys[i]-kiss[i]+1)*(nagyo[i]-kiso[i]+1)==i+1) jo[i]=1, db++;
    }
    return db;
}
void give_initial_chart(int a, int b, vector<int> c, vector<int> d) {
    n=a, m=b;
    for (int i=0; i<n*m; i++) sor[i]=c[i], oszlop[i]=d[i];
    int ks=n, ns=0, ko=m, no=0;
    for (int i=0; i<n*m; i++) {
        ks=min(ks, sor[i]), ko=min(ko, oszlop[i]);
        ns=max(ns, sor[i]), no=max(no, oszlop[i]);
        kiss[i]=ks, nagys[i]=ns, kiso[i]=ko, nagyo[i]=no;
        if ((ns-ks+1)*(no-ko+1)==i+1) jo[i]=1, db++;
    }
    //cout << db << endl;
}
#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...