G - Galactic Collegiate Programming Contest(Gym - 101572G 树状数组)
2017-07-24 12:37
716 查看
题意:一场比赛,每次有队伍做出一题就输出队伍1的排名。题量多的排名前,相同题量罚时少靠前,如果题量罚时都相同,排名一样,排名是指成绩比它好的队伍数。给出n个队伍、m个事件,下面m行t p 表示队伍t做出一题,罚时为p。
思路:设得分为(a,b)表示做出a题,罚时为b。先读入所有的事件,存下所有可能的得分。然后对其按规则排序,建立树状数组,结点保存每个得分的队伍数,那么得分为v的队伍排名就是得分小于v的队伍数+1。
思路:设得分为(a,b)表示做出a题,罚时为b。先读入所有的事件,存下所有可能的得分。然后对其按规则排序,建立树状数组,结点保存每个得分的队伍数,那么得分为v的队伍排名就是得分小于v的队伍数+1。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1e5+10; int n, m, a[maxn], b[maxn], x[maxn], y[maxn], cnt; typedef pair<int, int> P; P p[maxn*3];//存储所有可能的得分 int bit[maxn*3]; inline int lowbit(int x) { return x&(-x); } int sum(int k) { return k<=0 ? 0 : bit[k] + sum(k-lowbit(k)); } void add(int i, int x) { for( ; i<=cnt; i+=lowbit(i)) bit[i] += x; } int main() { scanf("%d%d", &n, &m); p[cnt++] = P(0, 0); for(int i=0; i<m; ++i) { scanf("%d%d", a+i, b+i); //(x[i], y[i])表示队伍i的得分 x[a[i]]--;//每做出一题-1, 这样保证题数多的在前面 y[a[i]]+=b[i]; p[cnt++] = P(x[a[i]], y[a[i]]); } sort(p, p+cnt); //虚拟出的得分(0,0)的队伍前面有n个队伍 int v = lower_bound(p, p+cnt, P(0, 0)) - p + 1; add(v, n); //清空x y数组,下面重新计算 memset(x, 0, sizeof(x)); memset(y, 0, sizeof(y)); for(int i=0; i<m; ++i) { //加入一个队伍得分,它原本所在位置得分队伍数减一 v = lower_bound(p, p+cnt, P(x[a[i]], y[a[i]]))-p+1; add(v, -1); x[a[i]]--; y[a[i]]+=b[i]; //把这个分数的队伍数加一 v = lower_bound(p, p+cnt, P(x[a[i]], y[a[i]]))-p+1; add(v, 1); //找出队伍1当前得分所对应的位置,得分比它少的都排在前面 v = lower_bound(p, p+cnt, P(x[1], y[1]))-p+1; printf("%d\n", sum(v-1)+1); } return 0; }
相关文章推荐
- Gym - 101572G -(set&细节)|(模拟&理解)|树状数组&好题-Galactic Collegiate Programming Contest
- Gym 100952A&&2015 HIAST Collegiate Programming Contest A. Who is the winner?【字符串,暴力】
- Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest
- Gym 100952B&&2015 HIAST Collegiate Programming Contest B. New Job【模拟】
- CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A.水题 100952B.水题 100952C.回文字符串 100952D.杨辉三角处理组合数 其他题目待续。。。
- Galactic Collegiate Programming Contest
- CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A-Who is the winner?
- Gym 100952C&&2015 HIAST Collegiate Programming Contest C. Palindrome Again !!【字符串,模拟】
- Gym 100952E&&2015 HIAST Collegiate Programming Contest E. Arrange Teams【DFS+剪枝】
- Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】
- Codeforces Gym 101608 - 2017 ACM Jordanian Collegiate Programming Contest
- Gym 100952G&&2015 HIAST Collegiate Programming Contest G. The jar of divisors【简单博弈】
- Gym 101102A Coins -- 2016 ACM Amman Collegiate Programming Contest(01背包变形)
- Gym 100952H&&2015 HIAST Collegiate Programming Contest H. Special Palindrome【dp预处理+矩阵快速幂/打表解法】
- CodeFroces GYM 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) B.street(最短路)
- 【离散化树状数组】Nordic Collegiate Programming Contest G.Galactic Collegiate Programming Contest
- Gym 100952D&&2015 HIAST Collegiate Programming Contest D. Time to go back【杨辉三角预处理,组合数,dp】
- Gym 100952I&&2015 HIAST Collegiate Programming Contest I. Mancala【模拟】
- GYM 2017 ACM Amman Collegiate Programming Contest
- Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题】