Submission #1301757

#TimeUsernameProblemLanguageResultExecution timeMemory
1301757rana_azkaCircle Passing (EGOI24_circlepassing)C++20
31 / 100
434 ms71004 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; const int MOD = 1e9+7; const int MAXN = 1e5; int n, m, q; vector<int> punyaBF; map<int, int> BF; void mulaidarinol(){} int getDist(int a, int b){ if(a > b) swap(a, b); int ret = min(b - a, (2*n) - b + a); return ret; } void solve(){ cin >> n >> m >> q; for(int i = 1; i <= m; i++){ int x; cin >> x; punyaBF.push_back(x); punyaBF.push_back(x+n); BF[x] = x+n; BF[x+n] = x; } sort(punyaBF.begin(), punyaBF.end()); reverse(punyaBF.begin(), punyaBF.end()); punyaBF.push_back(punyaBF[0]); reverse(punyaBF.begin(), punyaBF.end()); while(q--){ int start, finish; cin >> start >> finish; int ans = getDist(start, finish); // LEBIH KECIL int idx = 0; int left = 1, right = 2*m; int mid; while(left <= right){ mid = (left + right) / 2; if(punyaBF[mid] <= start){ idx = mid; left = mid + 1; }else{ right = mid - 1; } } int temp = getDist(start, punyaBF[idx]) + 1 + getDist(BF[punyaBF[idx]], finish); ans = min(temp, ans); // LEBIH BESAR idx = 0; left = 1; right = 2*m; mid = 0; while(left <= right){ mid = (left + right) / 2; if(punyaBF[mid] >= start){ idx = mid; right = mid - 1; }else{ left = mid + 1; } } temp = getDist(start, punyaBF[idx]) + 1 + getDist(BF[punyaBF[idx]], finish); ans = min(temp, ans); cerr << "=> "; cout << ans << endl; } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; while(tc--){ // mulaidarinol(); solve(); } return 0; }
#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...