제출 #611197

#제출 시각아이디문제언어결과실행 시간메모리
611197alireza_kavianiMinerals (JOI19_minerals)C++17
40 / 100
45 ms7688 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; #define SZ(x) int((x).size()) const int MAXN = 1e5 + 10; const int LOG = 16; int n , cnt , L[MAXN] , M[MAXN] , R[MAXN] , mark[MAXN]; vector<int> v1 , v2 , Q[MAXN]; int query(int ind , int x){ cnt -= mark[x]; mark[x] ^= 1; cnt += mark[x]; int res = Query(x); if(ind % 2 == 0){ return res; } return n + res - cnt; } void Solve(int N) { n = N; for(int i = 1 ; i <= 2 * n ; i++){ int x = query(0 , i); if(x == SZ(v1)){ v2.push_back(i); } else{ v1.push_back(i); } } for(int i = 0 ; i < n ; i++){ L[i] = -1; R[i] = n - 1; } for(int i = 0 ; i < LOG ; i++){ for(int j = 0 ; j < n ; j++){ Q[j].clear(); } for(int j = 0 ; j < n ; j++){ M[j] = max(0 , (R[j] + L[j]) / 2); Q[M[j]].push_back(j); } for(int j = 0 ; j < n ; j++){ int x = query(i + 1 , v1[j]); for(int k : Q[j]){ int y = query(i + 1 , v2[k]); if(x != y){ L[k] = M[k]; } else{ R[k] = M[k]; } x = y; } } } for(int i = 0 ; i < n ; i++){ Answer(v2[i] , v1[R[i]]); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...