[COCI2015]COCI
[COCI2015]COCI
题目大意:
有\(n(n\le5\times10^5)\)个人比赛,比赛总共进行\(3\)轮,每一轮得分为\([0,650]\)内的整数。现在已经得知每个人前两轮的成绩。若规定一个人\(A\)在前两轮的成绩均严格高于\(B\),则\(A\)在第\(3\)轮的成绩也一定高于\(B\)。求每个人在比赛完成后,最高及最低的可能排名。
思路:
以最高排名为例,对于人\(A\)来言,若\(B\)在前两轮得分的总和\(-A\)在前两轮得分的总和\(\ge 650\),则无论如何,\(A\)都没有再次超过\(B\)的可能。
剩下我们则需要统计与\(A\)两轮得分差值不超过\(650\),但是又全面碾压\(A\)的人的个数。这显然是一个二维数点问题,用二维树状数组解决即可。
时间复杂度\(\mathcal O(n\log^2650)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=5e5+1,M=652;
struct Player {
int a,b,id;
int total() const {
return a+b;
}
bool operator < (const Player &rhs) const {
return total()<rhs.total();
}
};
Player p[N];
class FenwickTree1 {
private:
int val[M][M];
int lowbit(const int &x) const {
return x&-x;
}
public:
void modify(int p,const int &q,const int &x) {
for(;p;p-=lowbit(p)) {
for(register int j=q;j;j-=lowbit(j)) {
val[p][j]+=x;
}
}
}
int query(int p,const int &q) {
int ret=0;
for(;p<M;p+=lowbit(p)) {
for(register int j=q;j<M;j+=lowbit(j)) {
ret+=val[p][j];
}
}
return ret;
}
};
FenwickTree1 t1;
class FenwickTree2 {
private:
int val[M][M];
int lowbit(const int &x) const {
return x&-x;
}
public:
void modify(int p,int q,const int &x) {
for(p++,q++;p<M;p+=lowbit(p)) {
for(register int j=q;j<M;j+=lowbit(j)) {
val[p][j]+=x;
}
}
}
int query(int p,int q) {
int ret=0;
for(p++,q++;p;p-=lowbit(p)) {
for(register int j=q;j;j-=lowbit(j)) {
ret+=val[p][j];
}
}
return ret;
}
};
FenwickTree2 t2;
int max[N],min[N];
int main() {
const int n=getint();
for(register int i=1;i<=n;i++) {
p[i].a=getint();
p[i].b=getint();
p[i].id=i;
}
std::sort(&p[1],&p[n]+1);
for(register int i=1,j=1;i<=n;i++) {
for(;j<=n&&p[j].total()-p[i].total()<=650;j++) {
t1.modify(p[j].a,p[j].b,1);
}
max[p[i].id]=n-j+1+t1.query(p[i].a+1,p[i].b+1);
t1.modify(p[i].a,p[i].b,-1);
}
std::reverse(&p[1],&p[n]+1);
for(register int i=1,j=1;i<=n;i++) {
for(;j<=n&&p[i].total()-p[j].total()<650;j++) {
t2.modify(p[j].a,p[j].b,1);
}
min[p[i].id]=n-(n-j+1+t2.query(p[i].a-1,p[i].b-1));
}
for(register int i=1;i<=n;i++) {
printf("%d %d\n",max[i]+1,min[i]);
}
return 0;
}
[COCI2015]COCI的更多相关文章
- [COCI]coci2015/2016 nekameleoni
题意: 初始数列,每个数都在1~k以内 支持两种操作:1.修改一个数,修改后的数在1~k内 2.查询一个最短包含1~k的序列的长度 查询100000 ...
- BZOJ3188: [Coci 2011]Upit
3188: [Coci 2011]Upit Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 72 Solved: 24[Submit][Status] ...
- [SinGuLaRiTy] COCI 2016~2017 #5
[SinGuLaRiTy-1012] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 最近神犇喜欢考COCI...... 测试题目 对于所有的 ...
- [SinGuLaRiTy] COCI 2011~2012 #2
[SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s ...
- BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...
- BZOJ3810: [Coci2015]Stanovi
3810: [Coci2015]Stanovi Description Input 输入一行,三个整数,n, m, k Output 输出一个数,表示最小不满意度. Sample Input ...
- BZOJ_2223_[Coci 2009]PATULJCI_主席树
BZOJ_2223_[Coci 2009]PATULJCI_主席树 Description Input 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 ...
- COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...
- 【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社
原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?) bridge操作判联 ...
随机推荐
- Ubuntu 更改屏幕分辨率
安装完Ubuntu后发现分辨率不合适,平时习惯了看小一点的文字,所以搜了一下修改屏幕分辨率的命令,具体操作如下: 1.先用 xrandr 命令查看一下当前系统支持的分辨率 wayde@wayde-Al ...
- Python函数之递归函数
递归函数的定义:在这个函数里再调用这个函数本身 最大递归深度默认是997或者998,python从内存角度做的限制 优点:代码变简单 缺点:占内存 一:推导年龄 问a的值是多少: a 比 b 小2,b ...
- PyCharm之python书写规范--消去提示波浪线
强迫症患者面对PyCharm的波浪线是很难受的,针对如下代码去除PyCharm中的波浪线: # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user = & ...
- 函数wait和waitpid
函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号 ...
- linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
1:linux操作系统 netstat 命令用于显示各种网络相关信息,即网络状态.而我主要使用netstat查看端口号是否启动: 参数详情: 1 -a (all)显示所有选项,默认不显示LISTEN相 ...
- 学习笔记: 特性Attribute详解,应用封装
/// /// 特性:中括号声明 /// /// 错觉:每一个特性都可以带来对应的功能 /// /// 实际上特性添加后,编译会在元素内部产生IL,但是我们是没办法直接使用的, /// 而且在meta ...
- What's news in Visual Studio 2017
文字总结: 1.高级智能提示 在属性列表中输入 M C即可查询属性中包含字母m\c的属性 2.更快的导航查询,在Go To All中输入任意查询的字符,可快速查到任何包含关键字的文件 3.代码智能分 ...
- FastJson 数组、List、Set、Map基本序列化与日期格式化
摘要: FastJson可以直接序列化数组.List.Set.Map等,也可以直接支持日期类型数据的格式化,包括java.util.Date.java.sql.Date.java.sql.Timest ...
- Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
最关键的一点就是 f[ 0 ] * a[ 0 ] + f[ 1 ] * a[ 1 ] + ... + f[ n - 1] * a[ n - 1] f[ 1 ] * a[ 0 ] + f[ 2 ] * ...
- jenkins(1): jenkins安装以及从gitlab拉取代码
1. gitlab前面已经写过了,自己去参考 https://www.cnblogs.com/yitianyouyitian/p/9214940.html 2. jenkins安装 2.1 jdk 安 ...