Submission #960101

#TimeUsernameProblemLanguageResultExecution timeMemory
960101hqminhuwuFinding Routers (IOI20_routers)C++14
97.56 / 100
1 ms600 KiB
#include <bits/stdc++.h> #include "routers.h" using namespace std; typedef long long ll; typedef long double ld; typedef pair <ll,ll> pll; typedef pair <int,int> pii; typedef pair <int,pii> piii; #define forr(_a,_b,_c) for(int _a = (_b); _a <= (_c); ++_a) #define ford(_a,_b,_c) for(int _a = (_b) + 1; _a --> (_c);) #define forf(_a,_b,_c) for(int _a = (_b); _a < (_c); ++_a) #define st first #define nd second #define pb push_back #define mp make_pair #define all(x) begin(x),end(x) #define mask(i) (1LL << (i)) #define bit(x, i) (((x) >> (i)) & 1) #define bp __builtin_popcountll #define file "test" const int N = 5e5 + 5; const ll oo = 1e9; const ll mod = 1e9 + 7; // 998244353; int pos[N], lmt; void calc (int l, int r, int opl, int opr){ if (l > r) return; int m = (l + r) >> 1; int low = opl, high = opr; int mx = -oo, mn = oo; while (low < high){ int mid = (low + high) >> 1; int tmp = use_detector(mid); if (tmp == m){ mx = max (mx, mid); mn = min (mn, mid); } if (tmp < m) low = mid + 1; else high = mid; } pos[m] = low - 1; calc (l, m - 1, opl, min(mn, low - 1)); calc (m + 1, r, max (mx, low + 1), opr); } vector <int> find_routers (int len, int n, int q){ vector <int> a(n, 0); lmt = n; calc (1, n - 1, 1, len ^ 1); forf (i, 1, n) a[i] = pos[i] + pos[i] - a[i - 1]; return a; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...