牛客小白月赛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 ...
随机推荐
- java 简单指令说明
javac:Java编译器,Java程序的编译工具,用来将Java程序的源文件编译成字节码文件,也就是.class文件.java:Java解释器,解释和执行已经转换成字节码的Java应用程序.jdb: ...
- 神奇的hsl
HSL色彩模式是工业界的一种颜色标准,是通过对色相(H).饱和度(S).明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的.今天我们看看这种色彩模式,能在CSS中产生什么神奇的变 ...
- isset、empty 误区
isset() 常用来判定变量是否存在 但是当变量赋值为NUll时候,返回值一样是FALSE 而实际上变量是存在的,与实际情况不符,判定错误. empty() 用来判定变量或者类的属性值是否为等 ...
- MySQL5.6多实例安装
MySQL-5.6.36.tar.gz多实例安装 查看官方安装说明 more INSTALL-SOURCE 安装cmake及相关依赖包 yum install -y cmake gcc [root@v ...
- EZOJ #385 排列
分析 对于第一问我们直接从上到下枚举所有横边 每一次交换两边的列标号即可 对于第二问我们发现答案就是最终序列的逆序对数量 代码 #include<bits/stdc++.h> using ...
- Java常用工具——java包装类
一.包装类和基本数据类型 装箱:基本数据类型——包装类 拆箱:包装类——基本数据类型 package com.imooc.wrap; public class WrapTestOne { public ...
- Git错误总结
1.error: failed to push some refs to ‘git@github.com:XXXX/XXXX‘ hint: Updates were rejected because ...
- PHP继承及实现
php学习已经有一段时间了,来对之前的知识积累做个记录. php实现单继承和多实现.单继承: 一个类只能有一个extends 抽象类 ,多实现 :一个类可以implements 多个接口 举个简单的栗 ...
- 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控
一.安装配置InfluxDB InfluxDB是GO语言开发的一个开源分布式时序数据库,非常适合存储指标.事件.分析等数据.有人做过mysql和influxDB对比,存储1000万条数据mysql要7 ...
- Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt.而在下一个时间节点t ...