zjnu1725 COCI (类似二维树状数组模拟)
Description
The 3rd round of COCI is already here! In order to bet on predict the scores, we have assumed the following:
If contestant A scored strictly more points than contestant B in each of the first two rounds, then in the
third round A will score at least an equal amount of points as B.
Of course, in each round (including this one, the 3rd one) it is possible to score from 0 to 650 points. On the
total ranking list, contestants are sorted descending according to the sum of points from all three rounds.
The contestants with an equal sum share the same place and the next contestant gets the realistic following place.
For example, contestants with sums equal to 1000, 1000, 900, 900 and 800 points win places 1., 1., 3., 3. and 5.,
respectively.
For each of the N contestants, we know the number of points scored in the first and second round. Given the
aforementioned assumption, determine the highest and lowest place each contestant can get on the total ranking
list after three rounds of COCI.
Input
The first line of input contains an integer N (1 <= N <= 500000), the number of contestants.
Each of the following N lines contains two integers from the interval [0; 650]: the number of points each contestant
won in the first and second round.
Output
For each contestant, in the order given in the input, output two integers per line: the required highest and lowest
place they can get on the total ranking list.
Sample Input
5
250 180
250 132
220 123
132 194
220 105
10
650 550
550 554
560 512
610 460
610 456
650 392
580 436
650 366
520 456
490 456
Sample Output
1 3
1 3
3 5
1 5
3 5
1 4
1 8
2 8
2 7
2 9
1 10
4 10
1 10
5 10
5 10
题意:n个人进行决斗,共有三场比赛,前两场比赛的成绩已经知道了,第三场的成绩未知,已知如果A前两场比赛每一场比赛成绩都严格高于B,那么A的第三场成绩一定大于等于B,最后的结果按三场总成绩从高到低排序,问每一个人最好的名次和最差的名词分别可能为多少。
思路:先考虑一个人A最好的情况,那么A得到的分数为650分,那么之前两场严格高于她的人最后一定也高于她,如果B之前一门小于等于她,另一门高于她,这种情况最后也不会比她高,因为可以另B的第三门成绩为0,那么A的成绩一定是大于等于B的(等于的情况有两种,一种是第二门成绩为0,但是B的第二门成绩为650,第一门成绩两者相同,另一种是第一种第二种反一下),又因为两者成绩相等自己不会退后名词,所以可以不用管。再考虑A最坏的情况,我们考虑比A考的差的人,这里和之前一样,只是要考虑(0,0,a[i]-1,b[i]-1)的总数,这里还要考虑和她成绩相同的情况,就是A的a[i]或者b[i]=650,要减去这些,然后用n减去比她考的差的人数就是答案了。
注意:这题不能用树状数组,因为会超时,又因为点的坐标大小都很小,所以可以用s[i][j]表示x小于等于i,y小于等于j的坐标总数。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define NN 500050
#define MM 650
int a[NN],b[NN];
int k[MM+10][MM+10],s[MM+10][MM+10];
int solve(int p,int q,int P,int Q)
{
int i,j;
if(P<0 || Q<0)return 0;
int sum=s[P][Q];
if(p>0){
sum-=s[p-1][Q];
}
if(q>0){
sum-=s[P][q-1];
}
if(p>0 && q>0){
sum+=s[p-1][q-1];
}
return sum;
}
int main()
{
int n,m,i,j,c,d;
while(scanf("%d",&n)!=EOF)
{
memset(k,0,sizeof(k));
memset(s,0,sizeof(s));
for(i=1;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
k[a[i] ][b[i] ]++;
}
for(i=0;i<=MM;i++){
for(j=0;j<=MM;j++){
s[i][j]=k[i][j];
if(i>0){
s[i][j]+=s[i-1][j];
}
if(j>0){
s[i][j]+=s[i][j-1];
}
if(i>0 && j>0){
s[i][j]-=s[i-1][j-1];
}
}
}
for(i=1;i<=n;i++){
printf("%d ",solve(a[i]+1,b[i]+1,MM,MM)+1 );
printf("%d\n",n-solve(0,0,a[i]-1,b[i]-1)-k[a[i] ][0]*(b[i]==MM)-k[0][b[i] ]*(a[i]==MM) );
}
}
return 0;
}
zjnu1725 COCI (类似二维树状数组模拟)的更多相关文章
- poj 1195:Mobile phones(二维树状数组,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14489 Accepted: 6735 De ...
- 二维树状数组(水题) POJ1195
前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...
- 二维树状数组——SuperBrother打鼹鼠(Vijos1512)
树状数组(BIT)是一个查询和修改复杂度都为log(n)的数据结构,主要用于查询任意两位之间的所有元素之和,其编程简单,很容易被实现.而且可以很容易地扩展到二维.让我们来看一道很裸的二维树状数组题: ...
- 【二维树状数组】计数问题 @JSOI2009/upcexam5911
时间限制: 1 Sec 内存限制: 128 MB 题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入 ...
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...
- BZOJ3132 上帝造题的七分钟 【二维树状数组】
题目 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的 ...
- POJ 2155 Matrix(二维树状数组,绝对具体)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20599 Accepted: 7673 Descripti ...
- SCOI2014 bzoj3594 方伯伯的玉米田(二维树状数组+dp)
3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1971 Solved: 961[Submit][St ...
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...
随机推荐
- 通过实例学习 PyTorch
通过范例学习 PyTorch 本博文通过几个独立的例子介绍了 PyTorch 的基础概念. 其核心,PyTorch 提供了两个主要的特征: 一个 n-维张量(n-dimensional Tensor) ...
- 详细的String源码解析
我们常常把String类型的字符串作为HashMap的key,为什么要这样做呢? 因为String是不可变的,一旦初始化就不再改变了,如果被修改将会是一个新对象. @Test public void ...
- HBase的架构设计为什么这么厉害!
老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望能够帮助和自己一样自学编程的伙伴.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我 ...
- Memcached Session Manager 共享tomcat session设置
tomcat的lib下添加jar包 修改tomcat的conf目录下的context.xml文件 新增 sessionCookiePath="/" <Manager clas ...
- leetcode 31. Next Permutation (下一个排列,模拟,二分查找)
题目链接 31. Next Permutation 题意 给定一段排列,输出其升序相邻的下一段排列.比如[1,3,2]的下一段排列为[2,1,3]. 注意排列呈环形,即[3,2,1]的下一段排列为[1 ...
- 03--Docker 容器和镜像常用命令
一.帮助命令 docker version docker info docker --help =====================镜像命令=========================== ...
- Docker下梦织CMS的部署
摘要:Docker的广泛应用相对于传统的虚拟机而言提高了资源的利用率,推广后docker的影响不容忽视,在启动速度.硬盘.内存.运行密度.性能.隔离性和迁移性方面都有很大的提高.本次实训我们在cent ...
- Docker 拉取镜像速度太慢
Docker Hub 是我们分发和获取 Docker 镜像的中心,但由于服务器位于海外,经常会出现拉取/上传镜像时速度太慢或无法访问的情况.再加上运营方不断对 Docker Hub 的免费使用进行限制 ...
- 2021/1/20随记,MTU
背景: 事情是这样的,客户2台防火墙部署了ipsec,内网互通,但是其中ssh以及其他大命令之类的操作就会卡住,简单的vi命令可以使用. 解决: 排除网络问题,因为内网互通,其次是系统层面问题,最终定 ...
- 让源码包apache服务被服务管理命令识别
在默认情况下,源码包服务是不能被系统的服务管理命令所识别和管理的,但是如果我们做一些设定,则也是可以让源码包服务被系统的服务管理命令所识别和管理的.不过笔者并不推荐大家这样做, 因为这会让本来区别很明 ...