欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

HihoCoder 1513 : 小Hi的烦恼

发布时间:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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\n", (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; }

转载于:https://www.cnblogs.com/qdscwyy/p/9775060.html

总结

以上是生活随笔为你收集整理的HihoCoder 1513 : 小Hi的烦恼的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。