#include <bits/stdc++.h> #pragma GCC optimize "O3" using namespace std; unsigned int n, f, h, dl; unsigned int t[41]; unsigned int bt[41]; unsigned int odp[41][2]; void xd() { if(!f) { if(odp[dl][0]==h) { ++odp[dl][1]; } else if(odp[dl][0]>h) { odp[dl][0]=h; odp[dl][1]=1; } return; } --f; xd(); ++f; ++dl; unsigned int g=0; for(unsigned int i=t[f]-1; i; --i) { g+=bt[i]; } h+=g; bt[t[f]]=1; --f; xd(); ++f; --dl; h-=g; bt[t[f]]=0; } int main() { scanf("%d", &n); for(unsigned int i=1; i<=n; ++i) { scanf("%d", &t[i]); odp[i][0]=1000000000; } f=n; xd(); for(unsigned int i=1; i<=n; ++i) { printf("%d %d\n", odp[i][0], odp[i][1]); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> #pragma GCC optimize "O3" using namespace std; unsigned int n, f, h, dl; unsigned int t[41]; unsigned int bt[41]; unsigned int odp[41][2]; void xd() { if(!f) { if(odp[dl][0]==h) { ++odp[dl][1]; } else if(odp[dl][0]>h) { odp[dl][0]=h; odp[dl][1]=1; } return; } --f; xd(); ++f; ++dl; unsigned int g=0; for(unsigned int i=t[f]-1; i; --i) { g+=bt[i]; } h+=g; bt[t[f]]=1; --f; xd(); ++f; --dl; h-=g; bt[t[f]]=0; } int main() { scanf("%d", &n); for(unsigned int i=1; i<=n; ++i) { scanf("%d", &t[i]); odp[i][0]=1000000000; } f=n; xd(); for(unsigned int i=1; i<=n; ++i) { printf("%d %d\n", odp[i][0], odp[i][1]); } return 0; } |