hiho147周

题目链接

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;
}
原文地址:https://www.cnblogs.com/redips-l/p/6750381.html