Submission #798884

#TimeUsernameProblemLanguageResultExecution timeMemory
798884boyliguanhanSwap (BOI16_swap)C++17
21 / 100
2 ms1876 KiB
#include<bits/stdc++.h> #define T(a,b,c) make_tuple(a,b,c) using namespace std; int arr[400100],n; int pushed(int i,int v){ if(i*2>n) return 0; int v2 = arr[2*i]; if(i*2==n) return v2<v; int v3=arr[2*i+1]; if(v<v2 && v<v3) return 0; if(v2<v && v2<v3) return 1 + pushed(2*i,v); if(v<v2) return min(pushed(2*i,v),pushed(2*i+1,v))+1; int l1 = pushed(2*i,v2),l2 = pushed(2*i+1,v2); if(l1 <= l2) return 1+pushed(2*i+1,v); return 1+pushed(2*i,v); } int main() { memset(arr, 7, sizeof arr); cin >> n; for(int i = 1; i <= n; i++) cin >> arr[i]; for(int i = 1; i <= n; i++) { int &a=arr[i],&b=arr[i*2],&c=arr[i*2+1]; if(a>b||a>c){ if(b<c) swap(a,b); else { int a2=a,b2=b,c2=c; if(a2>b2) swap(a2,b2); if(pushed(2*i,a)>pushed(2*i+1,a)) swap(a2,b2); a = c2; b = a2; c = b2; } } cout << a << (i<n?' ':'\n'); } }
#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...