#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
typedef int lld;
typedef unsigned long long llu;
typedef double lf;
typedef long double llf;
typedef pair<int,int> pii;
#define pb push_back
#define mpii make_pair
#define dd second
#define ff first
#define sz size()
#define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i)
int c[41];
int mp[41];
int dp[32][512];
int32_t main(void){
int a;
scanf("%d", &a);
//a = 24;
For(i,0,a)scanf("%d", &c[i]);
//c[i] = i+1;
For(i,0,a-1)
For(j,i+1,a)if(c[j] < c[i])mp[j] |= (1<<i);
int up = 1<<a;
For(x,1,up){
lld tmp = 0;
lld X = x;
while(X) {
lld i = __builtin_ctz(X);
//cout<<X<<" "<<i<<endl;
tmp += __builtin_popcount(mp[i] & x);
X -= 1ll<<i;
}
lld _ = __builtin_popcount(x);
++dp[_][tmp];
}
For(i,1,a+1){
int tmp = 0;
while(!dp[i][tmp])++tmp;
printf("%d %d\n",tmp,dp[i][tmp]);
}
}
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 | #include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; typedef int lld; typedef unsigned long long llu; typedef double lf; typedef long double llf; typedef pair<int,int> pii; #define pb push_back #define mpii make_pair #define dd second #define ff first #define sz size() #define For(i,s,a) for(lld i=(lld)s;i<(lld)a;++i) int c[41]; int mp[41]; int dp[32][512]; int32_t main(void){ int a; scanf("%d", &a); //a = 24; For(i,0,a)scanf("%d", &c[i]); //c[i] = i+1; For(i,0,a-1) For(j,i+1,a)if(c[j] < c[i])mp[j] |= (1<<i); int up = 1<<a; For(x,1,up){ lld tmp = 0; lld X = x; while(X) { lld i = __builtin_ctz(X); //cout<<X<<" "<<i<<endl; tmp += __builtin_popcount(mp[i] & x); X -= 1ll<<i; } lld _ = __builtin_popcount(x); ++dp[_][tmp]; } For(i,1,a+1){ int tmp = 0; while(!dp[i][tmp])++tmp; printf("%d %d\n",tmp,dp[i][tmp]); } } |
English