zoukankan      html  css  js  c++  java
  • HihoCoder 1513 : 小Hi的烦恼

    描述

    小Hi从小的一大兴趣爱好就是学习,但是他发现尽管他认真学习,依旧有学神考的比他好。

    小Hi在高中期间参加了市里的期末考试,一共五门:语文、数学、英语、物理、化学。

    成绩出来之后,小Hi发现有些同学,所有科目都考的比他好,他很烦恼。所以他想知道所有科目都比自己名次靠前的同学的人数。

    为了方便,可以认为不存在两个人某一门名次是相同的。

    其他同学们也想知道有多少人全面碾压了他们,所以你需要对所有人输出答案。

    Solution

    虽然可以用5维cdq分治做但是好像没什么燃用.

    而且这个做法可以用分块加速一下, 当然我没有.

    #include <bitset>
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    const int N = 30005;
    
    int Ranks[N][6];
    
    std:: bitset<N> QRanks[6][N];
    int A[N], B[N], C[N], D[N], E[N];
    
    int main () {
    	int n;
    	scanf("%d", &n);
    	for (int i = 0; i < n; i += 1) {
    		int a, b, c, d, e;
    		scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
    		A[i] = a, B[i] = b, C[i] = c, D[i] = d, E[i] = e;
    		Ranks[a][1] = i, Ranks[b][2] = i, Ranks[c][3] = i,
    		Ranks[d][4] = i, Ranks[e][5] = i;
    	}
    	for (int i = 1; i <= 5; i += 1)
    		for (int j = 1; j <= n; j += 1)
    			QRanks[i][j] = QRanks[i][j - 1], QRanks[i][j].set(Ranks[j][i]);
    	for (int i = 0; i < n; i += 1) {
    		printf("%d
    ", (QRanks[1][A[i] - 1] & QRanks[2][B[i] - 1]
    					  & QRanks[3][C[i] - 1] & QRanks[4][D[i] - 1] & QRanks[5][E[i] - 1]).count());
    	}
    	return 0;
    }
    
  • 相关阅读:
    P3822 [NOI2017]整数
    P4630 [APIO2018] Duathlon 铁人两项
    P3230 [HNOI2013]比赛
    P2570 [ZJOI2010]贪吃的老鼠
    P4576 [CQOI2013]棋盘游戏
    P3256 [JLOI2013]赛车
    P3297 [SDOI2013]逃考
    CF487E Tourists
    设置一个双色球脚本(2)并带颜色输出
    设置一个双色球脚本
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/9775060.html
Copyright © 2011-2022 走看看