제출 #1016045

#제출 시각아이디문제언어결과실행 시간메모리
1016045mindiyak자리 배치 (IOI18_seats)C++14
17 / 100
4070 ms60496 KiB
#include "seats.h" #pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops") #include <bits/stdc++.h> #include <string> #include <iostream> #include <cmath> #include <numeric> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> pi; typedef pair<int, int> pl; typedef pair<ld, ld> pd; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<vector<int>> vvi; typedef vector<ld> vd; typedef vector<long long> vl; typedef vector<pi> vpi; typedef vector<pl> vpl; #define FOR(i, a, b) for (int i = a; i < (b); i++) #define F0R(i, a) for (int i = 0; i < (a); i++) #define FORd(i, a, b) for (int i = (b)-1; i >= a; i--) #define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--) #define trav(a, x) for (auto &a : x) #define uid(a, b) uniform_int_distribution<int>(a, b)(rng) #define len(x) (int)(x).size() #define mp make_pair #define pb push_back #define F first #define nl endl #define S second #define lb lower_bound #define ub upper_bound #define aint(x) x.begin(), x.end() #define raint(x) x.rbegin(), x.rend() #define ins insert const int MOD = 1000000007; ll ans = 0; vi ra(1e6+2), rb(1e6+2), ca(1e6+2), cb(1e6+2), found(1e6+2,0); vi R(1e6+2),C(1e6+2); int N; void give_initial_chart(int H, int W, std::vector<int> R_, std::vector<int> C_) { N=H*W; R = R_; C = C_; ra[0] = R[0]; rb[0] = R[0]; ca[0] = C[0]; cb[0] = C[0]; found[0] = 1; ans = 1; FOR(i,1,N){ ra[i] = min(ra[i-1],R[i]); rb[i] = max(rb[i-1],R[i]); ca[i] = min(ca[i-1],C[i]); cb[i] = max(cb[i-1],C[i]); if((rb[i]-ra[i]+1)*(cb[i]-ca[i]+1) == i+1){ ans+=1; found[i]=1; } } // FOR(i,0,N)cout << found[i] << " "; // cout << endl; } int swap_seats(int a, int b) { if(a>b)swap(a,b); swap(R[a],R[b]); swap(C[a],C[b]); if(a==0){ ra[0] = R[0]; rb[0] = R[0]; ca[0] = C[0]; cb[0] = C[0]; a++; } FOR(i,a,b+1){ ra[i] = min(ra[i-1],R[i]); rb[i] = max(rb[i-1],R[i]); ca[i] = min(ca[i-1],C[i]); cb[i] = max(cb[i-1],C[i]); if((rb[i]-ra[i]+1)*(cb[i]-ca[i]+1) == i+1){ if(found[i])continue; ans+=1; found[i]=1; }else{ if(!found[i])continue; ans-=1; found[i]=0; } } // FOR(i,0,N)cout << found[i] << " "; // cout << endl; 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...