zoukankan      html  css  js  c++  java
  • 【hiho】 147周 “五维数点” 问题【bitset优化】

    题目来源

    hiho一下 第147周

    “五维数点”问题

    现在有n个在五维空间中的点(X_i,Y_i,Z_i,Q_i,W_i)。现在对于每个点,我们需要知道所有坐标均比它小的点的数量。
    转化为集合操作,用bitset 的and 来模拟2个集合之间的交集,优化后的时间复杂度为成O(N^2/32)

    AC code

    #include<iostream>
    #include<bitset>
    #include<cstdio>
    using namespace std;
    #define maxn 30010
    
    bitset<maxn> nums[5][maxn];
    
    int nodes[maxn][5];
    
    int order[maxn];
    
    /*
    非常的巧妙,充分地利用了学生的排名
    */
    int main()
    {
        int N,i,j;
        scanf("%d",&N);
        for(i=0;i<N;i++)
            for(j=0;j<5;j++)
                scanf("%d",&nodes[i][j]);
    	// 时间复杂度O(N)
        for(i=0;i<5;i++)
        {
            for(j=0;j<N;j++)
            {
    			/*order数组表示排名
    			order[a]=b
    			排名为a的人,所在的位置是b
    			*/
    			
                order[nodes[j][i]]=j+1;
            }
            for(j=2;j<=N;j++)
            {
                nums[i][order[j]]=nums[i][order[j-1]];
                nums[i][order[j]][order[j-1]]=1;
            }
        }
        for(i=1;i<=N;i++)
        {
            bitset<maxn> tmp;
            tmp = nums[0][i] & nums[1][i] & nums[2][i] & nums[3][i] & nums[4][i];
            printf("%lu
    ",tmp.count());
        }
        return 0;
    }
    
    
  • 相关阅读:
    java中awt和swing是的关系以及区别
    java 5.0和java6.0的区别
    bpel 经典实例入门教程
    java中指针的问题
    linux下软件的基本安装和卸载
    stomp与veil用法
    in perspective用法
    不錯的句子
    fit into用法
    ceremony用法
  • 原文地址:https://www.cnblogs.com/shengwang/p/9761555.html
Copyright © 2011-2022 走看看