首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛网络预赛C题(HDOJ-4217)

原创 2012年04月16日 14:06:41

       这题比赛的时候是狐狸大大敲的..先用了list..结果超时了..果断树状数组A之...其实这题当年做过很类似的: POJ2828 插队排队问题..

       初始所有点的值都是1..那么初始时每个点k的1~k之和a[k]就是当前数(当然做了取出操作后就不一样了...)...要取出当前第k大时..用二分夹逼找到a[h]=k的h..再将h位更新为-1.并更新树状数组..那么就相当于将>=h的每个点的a[ ] 都-1了...

       刚才自己来敲得时候..没注意最后的结果要用64位整型存储...= =..


Program:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<queue>
#define ll long long
using namespace std; 
int T,t,n,a[500001];  
ll ans;
void insert(int k,int d)
{
      while (k<=n)
      {
           a[k]+=d;
           k+=(-k)&k;       
      }  
}
int getsum(int k)
{
      int t=0;
      while (k>0)
      {
           t+=a[k];   
           k-=((-k)&k);         
      }
      return t;   
}
int find(int k)
{
      int l=0,r=n,mid;
      while (r-l>1)
      {
            mid=(r+l)/2;
            if (getsum(mid)>=k) r=mid;
               else l=mid;
      }
      return r;
}
int main()
{   
      int i,k,p,m;
      scanf("%d",&T);
      for (t=1;t<=T;t++)
      {
            scanf("%d%d",&n,&k);
            memset(a,0,sizeof(a));
            for (i=1;i<=n;i++) insert(i,1);
            ans=0;
            while (k--)
            {
                  scanf("%d",&p);
                  m=find(p);
                  ans+=m;
                  insert(m,-1);
            }
            printf("Case %d: %I64d\n",t,ans); 
      }
      return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

第四届华中区程序设计邀请赛暨武汉大学第十三届校赛 网络预选赛

武汉大学的校赛网络赛,之前WHUOJ上说网络赛晋级前20的外校队伍可以到武汉大学现场参加正式比赛,于是就参加了这场网络赛,结束的时候,由于罚时多了些,并没有进入前20,后来官网公布外校队伍名单,发现6...
  • u010770930
  • u010770930
  • 2015年04月20日 13:45
  • 1119

第五届华中区程序设计邀请赛暨武汉大学第十四届校赛 Problem 1608 - Calculation

链接:戳这里 Problem 1608 - Calculation Time Limit: 500MS   Memory Limit: 65536KB    Descriptio...
  • libin66
  • libin66
  • 2016年04月11日 22:15
  • 649

第二届华中区程序设计邀请赛暨武汉大学第十一届校赛 网络预选赛 解题报告

2013WHUACM校赛网赛题目题解 一个人出一套题目略累。。不过还好数据啥的没出什么差错。 关于题目描述:附件中会有一份中文的题目,所以以下题解不再赘述题意。 E-easy N-norma...
  • chlxyd
  • chlxyd
  • 2013年04月14日 17:01
  • 2850

首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛网络预赛I题(HDOJ-4223)

本题题目是 DP? 但显然解决方案不是DP...对于这一类求一区间合的题目...可以先将每个sum(1~k) 算出来...通过两个sum之差得到某一区间的值..想到这一步..本题思路就出来了..计算出...
  • kk303
  • kk303
  • 2012年04月15日 17:48
  • 4307

首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛网络预赛A题(HDOJ-4215)

比赛的时候最后时间专注1010去了..最后十分钟才想起1001应该能打表..结果没搞得赢..赛后果断AC阿...这题..好恶心..        其实对于这一类的N很大的问题..就要有大表找规律的思...
  • kk303
  • kk303
  • 2012年04月15日 17:40
  • 4563

首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛网络预赛G题(HDOJ-4221)

这题的题目是 贪心? 好吧..真的是贪心..只是稍微的尝试了一种方案..就过了...这种反感是将所有的项目按D排序..按这个顺序来安排工作..找到过程中最大的penalty就是..原理..只是感性的觉...
  • kk303
  • kk303
  • 2012年04月15日 17:52
  • 4177

武大网赛预赛 Problem 1540 - D - Fibonacci

http://acm.whu.edu.cn/land/problem/detail?problem_id=1540 一道很简单的矩阵模版题,没有解出来真是打脸... 要你求斐波那契数列...
  • csuhoward
  • csuhoward
  • 2014年03月31日 10:58
  • 464

HDU4223&&NYOJ422 首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛

这道题是武大校赛的题目,和我们OJ以前月赛时的题目一样,只不过我们OJ当时还让求绝对值最大值了,这道题目只让求绝对值最小了。直接用以前的代码就可以ac。就这道题目来说,因为让求绝对值最小的和,所以我们...
  • wmn_wmn
  • wmn_wmn
  • 2012年04月15日 19:31
  • 4401

首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛训练总结【8/11】

题目连接:http://acm.hdu.edu.cn/search.php?field=problem&key=%CA%D7%BD%EC%BB%AA%D6%D0%C7%F8%B3%CC%D0%F2%C...
  • mengxiang000000
  • mengxiang000000
  • 2017年07月28日 18:45
  • 326

大学生程序设计邀请赛(华东师范大学)A

A. 拼音魔法 Time limit per test: 1.0 seconds Time limit all tests: 1.0 seconds Memory limit: 256 megaby...
  • qq_38576126
  • qq_38576126
  • 2017年05月14日 21:27
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛网络预赛C题(HDOJ-4217)
举报原因:
原因补充:

(最多只允许输入30个字)