牛客小白月赛16 F 小石的妹子 (线段树)
链接:https://ac.nowcoder.com/acm/contest/949/F
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
小石想给她们一个重要程度 titi(重要程度为 1 表示最重要,重要程度越小表示越重要)。
如果一个妹子 i 的细心程度和热心程度都比妹子 j 大,那么妹子 i 的重要程度要大于妹子 j 的重要程度,即妹子 i 比妹子 j 重要。
流程如下:
每次从所有没有重要程度的妹子中,找到若干妹子。对于这些妹子的任意一个,需要保证没有其他妹子比她更重要。然后把她们的重要程度标为 1 。下一次再从剩下没有重要程度的妹子中找到若干妹子,依然符合上述条件,然后把她们的重要程度标为 2,……,重复直到所有妹子都有自己的重要程度。
由于妹子太多,小石忙不过来,请你帮帮他。
输入描述:
第一行输入一个正整数 n,表示妹子的数量。
接下来 n 行,每行两个正整数 ai,biai,bi,描述每个妹子的细心程度和热心程度。
保证所有的 aiai 两两不等,所有的 bibi 两两不等。
输出描述:
共 n 行,第 i 行输出一个正整数 titi 表示第 i 个妹子的重要程度。
备注:
1≤n≤105,1≤ai,bi≤1091≤n≤105,1≤ai,bi≤109 解题思路:像那二维偏序问题,先对a,b数组进行离散化处理一下,然后再按b值从大到小排一下序,然后从前往后对于第i个妹子的等级为比她的a值大的妹子中等级最大值加1,然后再将这个妹子的等级更新到线段树中。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
int n;
struct node{
int a,b;
int id,rk;
}p[maxn];
int Max[maxn*];
bool cmp(node x,node y){
return x.b>y.b;
}
bool cmp1(node x,node y){
return x.a<y.a;
}
bool cmp2(node x,node y){
return x.b<y.b;
}
bool cmp3(node x,node y){
return x.id<y.id;
}
void pushup(int rt){
Max[rt]=max(Max[rt<<],Max[rt<<|]);
}
void update(int pos,int val,int l,int r,int rt){
if(l==r){
Max[rt]=val;
return;
}
int mid=(l+r)/;
if(mid>=pos) update(pos,val,l,mid,rt<<);
if(mid<pos) update(pos,val,mid+,r,rt<<|);
pushup(rt);
}
int ask(int L,int R,int l,int r,int rt){
if(L<=l&&R>=r)
return Max[rt];
int mid=(l+r)/;
int ans=;
if(L<=mid) ans=max(ans,ask(L,R,l,mid,rt<<));
if(R>mid) ans=max(ans,ask(L,R,mid+,r,rt<<|));
return ans;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d%d",&p[i].a,&p[i].b);
p[i].id=i;
}
sort(p+,p++n,cmp1);
for(int i=;i<=n;i++) p[i].a=i;
sort(p+,p++n,cmp2);
for(int i=;i<=n;i++) p[i].b=i;
sort(p+,p++n,cmp); //按b值从大到小排
for(int i=;i<=n;i++){
p[i].rk=ask(p[i].a,n,,n,)+;//查找大于当前妹子a值的等级最大值再加1
update(p[i].a,p[i].rk,,n,); //将第i个妹子的等级更新到线段树中
}
sort(p+,p++n,cmp3);
for(int i=;i<=n;i++)
printf("%d\n",p[i].rk);
return ;
}
牛客小白月赛16 F 小石的妹子 (线段树)的更多相关文章
- 牛客小白月赛16 A 小石的签到题 ( 博弈)
链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)
H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...
- 牛客小白月赛30 B.最好的宝石 (线段树)
题意:RT. 题解:很明显的线段树维护区间最大值操作,但是我们同时还要维护最大值的个数,我们在build或者modify操作完子树然后push_up的时候,我们先从两个儿子取max更新父节点的最大值, ...
- 牛客小白月赛16 小石的妹子 二分 or 线段树
牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以. 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化. 怎么处理呢,你仔细想 ...
- 牛客网 牛客小白月赛1 F.三视图
F.三视图 链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 这个题自己想一下三维的,正视图和左视图中y轴为行数,x轴和z轴是列数,因为 ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客小白月赛3 F 异或【区间交集】
链接:https://www.nowcoder.com/acm/contest/87/F 来源:牛客网 题目描述 Cwbc想测试一下他的加密协议,以便防止其他人偷看他给XHRlyb的信. Cwbc提出 ...
- 牛客小白月赛6 F 发电 树状数组单点更新 求区间乘积 模板
链接:https://www.nowcoder.com/acm/contest/136/F来源:牛客网 HA实验是一个生产.提炼“神力水晶”的秘密军事基地,神力水晶可以让机器的工作效率成倍提升. ...
- 牛客小白月赛16 E 小雨的矩阵 ( 暴搜)
链接:https://ac.nowcoder.com/acm/contest/949/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
随机推荐
- AGC040
AGC040 A 模拟. B 因为顺序无关紧要,所以可以先把区间按右端点排序方便处理. 设第一个区间在\(A\)集合,考虑枚举第一个在\(B\)集合的区间\(i\),这样两个集合的右端点\(\min\ ...
- Unregistering JMX-exposed beans on shutdown解决方法:
Unregistering JMX-exposed beans on shutdown解决方法: 加入依赖如下: <dependency> <groupId>org.spr ...
- 笨办法学Python(learn python the hard way)--练习程序11-20
#ex11.py1 print("How old are you?",end=''), age = input() print("How tall are you?&qu ...
- ubuntu 虚拟机安装vmware tools
1.打开ubuntu虚拟机,点击“虚拟机”---> "安装 vmware tools" 2.进入vmware tools光盘,将VMwaretools压缩包复制粘贴到桌面 ...
- Sparse PCA: reproduction of the synthetic example
The paper: Hui Zou, Trevor Hastie, and Robert Tibshirani, Sparse Principal Component Analysis, Journ ...
- Caffe深入分析(源码)
Caffe的整体流程图: 程序入口:main() int main(int argc, char** argv) { ..... ]))(); .... } g_brew_map实现过程,首先通过 t ...
- JS获取当前时间并格式化
1.获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS” function p(s) { return s < 10 ? '0' + s : s; ...
- mysql行锁和死锁检测
行锁顾名思义,就是针对单行数据加锁,在mysql中,锁的实现是由引擎层实现的,MyISAM引擎就不支持行锁 不支持行锁就意味着并发控制只能使用表锁,也就是说同一时间,在这个表上只能有一个更新在执行,这 ...
- mysql的命令入门
mysql入门实践 学习教程 教程链接地址 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 文 ...
- SQL的一对多,多对一,一对一,多对多
1.一对多:比如说一个班级有很多学生,可是这个班级只有一个班主任.在这个班级中随便找一个人,就会知道他们的班主任是谁:知道了这个班主任就会知道有哪几个学生.这里班主任和学生的关系就是一对多. 2.多对 ...