제출 #379033

#제출 시각아이디문제언어결과실행 시간메모리
379033gustasonXylophone (JOI18_xylophone)C++14
0 / 100
1 ms364 KiB
#include "xylophone.h" #include<bits/stdc++.h> using namespace std; map<pair<int, int>, int> m; int qq(int L, int R) { if (m[{L, R}] != 0) { return m[{L, R}]; } return m[{L, R}] = query(L, R); } void solve(int n) { int l = 1, r = n, idx = r; while(l <= r) { int mid = (l + r) / 2; if (qq(mid, n) == n-1) { idx = mid; l = mid + 1; } else { r = mid - 1; } } vector<bool> seen(n+5, false); vector<int> an(n+5, -1); an[idx] = 1; if (idx != 1) { int val = qq(idx-1, idx); an[idx-1] = val - 1; seen[val] = true; } for(int i = idx-2; i >= 1; i--) { int val = qq(i, idx); if (!seen[val]) { an[i] = val - 1; seen[val] = true; } else { an[i] = an[i+1] - qq(i, i+1); } } if (idx != n) { int val = qq(idx, idx+1); an[idx+1] = val - 1; seen[val] = true; } for(int i = idx+2; i <= n; i++) { int val = qq(idx, i); if (!seen[val]) { an[i] = val - 1; seen[val] = true; } else { an[i] = an[i-1] - qq(i-1, i); } } for(int i = 1; i <= n; i++) { answer(i, an[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...