hihoCoder 1513 小Hi的烦恼

hihoCoder 1513 小Hi的烦恼

思路:

用bitset判断交集个数

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int N=3e4+5;
int rnk[N][5];
int num[N][5];//在第j门课排名为i的同学的编号
bitset<N>s[N][5],tmp;//在第j门课小于排名i的状态
int main(){
    /*ios::sync_with_stdio(false);
    cin.tie(0);*/
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=0;j<5;j++){
            scanf("%d",&rnk[i][j]);
            num[rnk[i][j]][j]=i;
        }
    }
    for(int j=0;j<5;j++){
        for(int i=2;i<=n;i++){
            s[i][j]=s[i-1][j];
            s[i][j].set(num[i-1][j]);
        }
    }
    for(int i=1;i<=n;i++){
        tmp=s[rnk[i][0]][0];
        for(int j=1;j<5;j++){
            tmp&=s[rnk[i][j]][j];
        }
        printf("%d\n",tmp.count());
    }
    return 0;
}

 参考:http://www.cnblogs.com/hua-dong/p/8196081.html

posted @ 2018-01-23 13:39  Wisdom+.+  阅读(166)  评论(0编辑  收藏  举报