제출 #580794

#제출 시각아이디문제언어결과실행 시간메모리
580794definitelynotmee자리 배치 (IOI18_seats)C++17
17 / 100
4083 ms43928 KiB
#include "seats.h" #include<bits/stdc++.h> using namespace std; #define ff first #define ss second #define all(x) x.begin(), x.end() using ll = long long; using pii = pair<int,int>; using pll = pair<ll,ll>; template<typename T> using matrix = vector<vector<T>>; vector<pii> v; int resp = 0; vector<pii> mini, maxi; vector<int> isgood; int n; void calc(int id, pii nmin, pii nmax){ resp-=isgood[id]; isgood[id] = (nmax.ff-nmin.ff+1)*(nmax.ss-nmin.ss+1) == id+1; resp+=isgood[id]; mini[id] = nmin; maxi[id] = nmax; } void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) { n = H*W; v = vector<pii>(n); mini = vector<pii>(n); maxi = vector<pii>(n); isgood = vector<int>(n); for(int i = 0; i < n; i++){ v[i] = {R[i], C[i]}; } calc(0,v[0],v[0]); for(int i = 1; i < n; i++){ pii nmin = mini[i-1], nmax = maxi[i-1]; nmin.ff = min(nmin.ff,v[i].ff); nmin.ss = min(nmin.ss,v[i].ss); nmax.ff = max(nmax.ff,v[i].ff); nmax.ss = max(nmax.ss,v[i].ss); calc(i,nmin,nmax); } } int swap_seats(int a, int b) { if(a > b) swap(a,b); swap(v[a],v[b]); if(a == 0){ mini[a] = v[a]; maxi[a] = v[a]; a++; } for(int i = a; i <= b; i++){ pii nmin = mini[i-1], nmax = maxi[i-1]; nmin.ff = min(nmin.ff,v[i].ff); nmin.ss = min(nmin.ss,v[i].ss); nmax.ff = max(nmax.ff,v[i].ff); nmax.ss = max(nmax.ss,v[i].ss); calc(i,nmin,nmax); } return resp; }
#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...