n个5维数,对于每个数,输出小于他的数的个数(每个维度都比他小);
#include <cstdio> #include <cstring> #include <bitset> #include <vector> #include <algorithm> using namespace std; const int N = 33333; struct Node{ int id; int a,b,c,d,e; static bool sortByA(const Node &x,const Node &y){ return x.a<y.a; } static bool sortByB(const Node &x,const Node &y){ return x.b<y.b; } static bool sortByC(const Node &x,const Node &y){ return x.c<y.c; } static bool sortByD(const Node &x,const Node &y){ return x.d<y.d; } static bool sortByE(const Node &x,const Node &y){ return x.e<y.e; } }; vector<Node> data[5]; bitset<N> bs[N][5]; int n; int main(){ for(int i=0;i<5;i++) data[i].resize(N); scanf("%d",&n); for(int i=0;i<n;i++){ Node tmp; scanf("%d%d%d%d%d",&tmp.a,&tmp.b,&tmp.c,&tmp.d,&tmp.e); tmp.id = i; for(int j=0;j<5;j++) data[j][i] = tmp; } std::sort(data[0].begin(),data[0].begin()+n,Node::sortByA); std::sort(data[1].begin(),data[1].begin()+n,Node::sortByB); std::sort(data[2].begin(),data[2].begin()+n,Node::sortByC); std::sort(data[3].begin(),data[3].begin()+n,Node::sortByD); std::sort(data[4].begin(),data[4].begin()+n,Node::sortByE); for(int j=0;j<5;j++){ bitset<N> curstate; curstate.set(data[j][0].id); for(int i=1;i<n;i++) { int curId = data[j][i].id; bs[curId][j]|=curstate; curstate.set(curId); } } for(int i=0;i<n;i++){ for(int j=1;j<5;j++) bs[i][0]&=(bs[i][j]); printf("%d ",bs[i][0].count()); } return 0; }