zoukankan      html  css  js  c++  java
  • Nordic Collegiate Programming Contest NCPC 2017-Problem G Galactic Collegiate Programming Contest

    题目大意:有n( n<1e5 )只队伍参加程序竞赛,然后给m个信息,每个信息告诉你第p

    个队伍过了一题,并且告诉你罚时是多少,让你输入每个信息之后,第一个队伍的

    排名。

    思路:一眼看过去就像数据结构题,我们可以用足够大的数表示过了一题然后减去罚时,

    这样就可以用一个数值来确定排名,然后我们用将所有出现过的分数抽离出来,排序去重

    用这些数离散化用树状数组维护各个分数队伍数的前缀和,这样就能快速计算排名。

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const double g=10.0,eps=1e-7;
     5 const int N=100000+10,maxn=400,inf=0x3f3f3f3f;
     6 int te[N],pe[N],cnt;
     7 ll pen[N],has[N];
     8 ll sum[N];
     9 void update(int i,ll v)
    10 {
    11     while(i<cnt)
    12     {
    13         printf("%d %d**
    ",i,cnt);
    14         sum[i]+=v;
    15         i+=i&(-i);
    16     }
    17 }
    18 ll query(int i)
    19 {
    20     ll ans=0;
    21     while(i>0)
    22     {
    23         ans+=sum[i];
    24         i-=i&(-i);
    25     }
    26     return ans;
    27 }
    28 int main()
    29 {
    30     int n,m;
    31     scanf("%d%d",&n,&m);
    32     cnt=1;
    33     has[cnt++]=0;
    34     for(int i=0;i<m;i++)
    35     {
    36         scanf("%d%d",&te[i],&pe[i]);
    37         pen[te[i]]+=1e10-pe[i];
    38         has[cnt++]=pen[te[i]];
    39     }
    40     sort(has+1,has+cnt);
    41     cnt=unique(has+1,has+cnt)-has;
    42     memset(pen,0,sizeof pen);
    43     update(1,n);
    44     for(int i=0;i<m;i++)
    45     {
    46         int p=lower_bound(has+1,has+cnt,pen[te[i]])-has;
    47         update(p,-1);
    48         pen[te[i]]+=1e10-pe[i];
    49         p=lower_bound(has+1,has+cnt,pen[te[i]])-has;
    50         update(p,1);
    51         p=lower_bound(has+1,has+cnt,pen[1])-has;
    52         int res=query(cnt-1)-query(p);
    53         printf("%d
    ",res+1);
    54     }
    55     return 0;
    56 }
    57 /********************
    58 
    59 ********************/
    View Code
  • 相关阅读:
    白话插件框架原理
    C# 可扩展编程MEF学习
    C#依赖注入实例
    迷你版AOP框架
    AOP 面向切面编程
    C++ 面向对象
    c++ 的异常处理
    C++ 模板 template
    c 二维数组动态分配和释放
    C++ 指针二维数组, C++二维指针数组笔记
  • 原文地址:https://www.cnblogs.com/CJLHY/p/7672895.html
Copyright © 2011-2022 走看看