Submission #212550

#TimeUsernameProblemLanguageResultExecution timeMemory
212550tselmegkhXylophone (JOI18_xylophone)C++14
100 / 100
101 ms556 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> #include "xylophone.h" using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const int N = 1e5 + 5, inf = 1e9; #define pb push_back #define mp make_pair #define ll long long #define ff first #define ss second #define all(a) a.begin(),a.end() typedef vector<int> vi; typedef pair<int,int> ii; typedef vector<ii> vii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); void solve(int n){ vi ans(n + 1), d1(n + 1), d2(n + 1); for(int i = 1; i < n; i++)d1[i] = query(i, i + 1); for(int i = 1; i < n - 1; i++)d2[i] = query(i, i + 2); ans[1] = 0; ans[2] = d1[1]; int x = 1; for(int i = 3; i <= n; i++){ if(d1[i - 2] + d1[i - 1] != d2[i - 2]){ x *= -1; } ans[i] = ans[i - 1] + d1[i - 1] * x; } int mx = -inf, mxp = -1, mn = inf, mnp = -1; for(int i = 1; i <= n; i++){ if(ans[i] > mx){ mx = ans[i]; mxp = i; } if(ans[i] < mn){ mn = ans[i]; mnp = i; } } if(mxp < mnp){ for(int i = 1; i <= n; i++){ ans[i] = 1 + mx - ans[i]; } }else{ for(int i = 1; i <= n; i++){ ans[i] = 1 + ans[i] - mn; } } for(int i = 1; i <= n; i++){ answer(i, ans[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...