제출 #103651

#제출 시각아이디문제언어결과실행 시간메모리
103651figter001자리 배치 (IOI18_seats)C++17
25 / 100
4077 ms36756 KiB
#include "seats.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int nax = 1010; const int kax = nax*nax; struct node{ short u,d,a,b; }seg[3*kax]; pair<short,short> p[kax]; int at,h,w,l,r,cnt,n; void build(int n,int s,int e){ if(s == e){ seg[n] = {p[s-1].first,p[s-1].first,p[s-1].second,p[s-1].second}; return; } build(n*2,s,(s+e)/2); build(n*2+1,(s+e)/2+1,e); seg[n] = {min(seg[n*2].u,seg[n*2+1].u) , max(seg[n*2].d,seg[n*2+1].d) , min(seg[n*2].a,seg[n*2+1].a) , max(seg[n*2].b,seg[n*2+1].b) }; } void update(int n,int s,int e){ if(s == e){ seg[n] = {p[s-1].first,p[s-1].first,p[s-1].second,p[s-1].second}; return; } if((s+e)/2 >= at) update(n*2,s,(s+e)/2); if((s+e)/2+1 <= at) update(n*2+1,(s+e)/2+1,e); seg[n] = {min(seg[n*2].u,seg[n*2+1].u) , max(seg[n*2].d,seg[n*2+1].d) , min(seg[n*2].a,seg[n*2+1].a) , max(seg[n*2].b,seg[n*2+1].b) }; } node get(int n,int s,int e){ if(s >= l && e <= r) return seg[n]; node x,y,z; x = y = {(int)1e4,0,(int)1e4,0}; if((s+e)/2 >= l) x = get(n*2,s,(s+e)/2); if((s+e)/2+1 <= r) y = get(n*2+1,(s+e)/2+1,e); z = {min(x.u,y.u) , max(x.d,y.d) , min(x.a,y.a) , max(x.b,y.b) }; return z; } void give_initial_chart(int H, int W, vector<int> R, vector<int> C) { for(int i=0;i<H*W;i++) p[i] = {R[i],C[i]}; h = H; w = W; n = h*w; build(1,1,n); } int swap_seats(int a, int b) { swap(p[a],p[b]); at = a+1; update(1,1,n); at = b+1; update(1,1,n); int ans = 0,cur = 0; l = 1; while(1){ if(cur >= n) break; cnt++; r = cur+1; node g = get(1,1,n); short u = g.u; short d = g.d; short a = g.a; short b = g.b; int q = (d - u + 1) * (b - a + 1); if(q == cur + 1){ ans++; cur++; }else{ cur = q - 1; } } return ans; }
#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...