Submission #595180

#TimeUsernameProblemLanguageResultExecution timeMemory
595180FatihSolakSeats (IOI18_seats)C++17
5 / 100
4070 ms108120 KiB
#include "seats.h" #include <bits/stdc++.h> #define N 1000005 using namespace std; struct node{ int l1,r1; int l2,r2; node(){ l1 = 1e9,r1 = 0; l2 = 1e9,r2 = 0; } node(int a,int b,int c,int d){ l1 = a,r1 = b; l2 = c,r2 = d; } int size(){ return (r1 - l1 + 1) * (r2 - l2 + 1); } }; node merge(node a,node b){ node ret; ret.l1 = min(a.l1,b.l1); ret.r1 = max(a.r1,b.r1); ret.l2 = min(a.l2,b.l2); ret.r2 = max(a.r2,b.r2); return ret; } struct SegTree{ vector<node> t; int n; SegTree(int size){ n = size; t.assign(4*n,node()); } void upd(int v,int tl,int tr,int pos,node val){ if(tl == tr){ t[v] = val; return; } int tm = (tl + tr)/2; if(pos <= tm){ upd(v*2,tl,tm,pos,val); } else upd(v*2+1,tm+1,tr,pos,val); t[v] = merge(t[v*2],t[v*2+1]); } node get(int v,int tl,int tr,int l,int r){ if(tr < l || r < tl) return node(); if(l <= tl && tr <= r) return t[v]; int tm = (tl + tr)/2; return merge(get(v*2,tl,tm,l,r),get(v*2+1,tm+1,tr,l,r)); } void upd(int pos,node val){ upd(1,0,n-1,pos,val); } node get(int l,int r){ return get(1,0,n-1,l,r); } node get(int x){ return get(0,x); } }; node v[N]; int cnt = 0; vector<int> r,c; SegTree tree(N); void give_initial_chart(int h, int w, vector<int> R, vector<int> C) { r = R; c = C; for(int i = 0;i<h*w;i++){ v[i] = node(r[i],r[i],c[i],c[i]); tree.upd(i,v[i]); if(tree.get(i).size() == i+1) cnt++; } } int swap_seats(int a, int b) { if(a > b)swap(a,b); for(int i = a;i<=b;i++){ if(tree.get(i).size() == i+1) cnt--; } swap(v[a],v[b]); tree.upd(a,v[a]); tree.upd(b,v[b]); for(int i = a;i<=b;i++){ if(tree.get(i).size() == i+1) cnt++; } return cnt; }
#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...