写一发暴力求五维偏序
其实道理也简单,就是对于每个维记录那些点比当前点小,最后每个维and一下就好
bitset优化下
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<bitset> using namespace std; int sa[10][31000],Rank[10][31000]; bitset<31000>s[10][31000],tt; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=5;j++) { scanf("%d",&Rank[j][i]); sa[j][Rank[j][i]]=i; } for(int j=1;j<=5;j++) for(int i=2;i<=n;i++) s[j][i]=s[j][i-1],s[j][i][sa[j][i-1]]=1; for(int i=1;i<=n;i++) { tt=s[1][Rank[1][i]]; for(int j=2;j<=5;j++)tt&=s[j][Rank[j][i]]; printf("%d ",tt.count()); } return 0; }