제출 #1237506

#제출 시각아이디문제언어결과실행 시간메모리
1237506IrateArt Collections (BOI22_art)C++20
35 / 100
121 ms63204 KiB
#include<bits/stdc++.h> #include "art.h" using namespace std; const int mxN = 4005; vector<int>ANS, pos; int n, QUERY = 0, hist[mxN][mxN]; int publish(vector<int>R); // { // QUERY++; // int I = 0; // for(int i = 0;i < n;++i){ // for(int j = i + 1;j < n;++j){ // I += (pos[R[i]] > pos[R[j]]); // } // } // return I; // } void answer(vector<int>R); // { // for(int i = 0;i < n;++i){ // if(R[i] != ANS[i]){ // cout << "ERRRR" << endl; // for(int j : R){ // cout << j << ' '; // } // cout << endl; // return; // } // } // } bool cmp(int a, int b){ if(hist[a][b] != -1)return hist[a][b]; vector<int>temp; for(int i = 1;i <= n;++i){ if(i == a || i == b)continue; temp.push_back(i); } temp.push_back(a); temp.push_back(b); int I = publish(temp); swap(temp[n - 2], temp[n - 1]); int D = I - publish(temp); int ans = !(D > 0); hist[a][b] = ans; hist[b][a] = !ans; if(D > 0)return ans; return ans; } vector<int>gen(int n){ vector<int>perm(n); for(int i = 1;i <= n;++i){ perm[i - 1] = i; } for(int i = 0;i < 1000;++i){ int a = rand() % n; int b = rand() % n; swap(perm[a], perm[b]); } return perm; } vector<int> Merge(vector<int>&left, vector<int>&right){ vector<int>res; int l = 0, r = 0, n = left.size(), m = right.size(); while(l < n && r < m){ if(cmp(left[l], right[r]))res.push_back(left[l++]); else res.push_back(right[r++]); } while(l < n)res.push_back(left[l++]); while(r < m)res.push_back(right[r++]); return res; } vector<int> Sort(int l, int r){ if(l == r)return {l + 1}; int mid = (l + r) / 2; vector<int> left = Sort(l, mid); vector<int> right = Sort(mid + 1, r); return Merge(left, right); } void solve(int N){ n = N; ANS = gen(n); pos.resize(n + 1); for(int i = 0;i < mxN;++i){ for(int j = 0;j < mxN;++j){ hist[i][j] = -1; } } for(int i = 0;i < n;++i){ pos[ANS[i]] = i; } answer(Sort(0, n - 1)); // cout << QUERY << '\n'; } // int main(){ // srand(time(0)); // ios_base::sync_with_stdio(0); // cin.tie(0); // int N; // cin >> N; // solve(N); // }
#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...