【CF160E】Buses and People
题目大意:给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a<a', b'<b, c'<c 的最小 c 对应的元组编号。
题解:这可以算是一道经典的三维偏序问题。
首先,离线处理所有询问,将这 N+M 个元组按照 a 从小到达进行排序,若有相同的 a,则给定元组应该排在询问元组之前。排序后即可保证对于任意一个询问元组,答案一定出现在该元组以前的给定元组中。因为要求的是最小的满足条件的 C,应该在 C 上建立线段树。对 C 进行离散化操作,在 (b,c) 上建立线段树,以 C 为下标,B 为权值。线段树中维护 B 的最大值,询问时在线段树上二分即可。时间复杂度为 \(O(nlogn)\)。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,m,ans[maxn>>1];
int d[maxn],tot;
struct rec{
int st,ed,t,id;
bool operator<(const rec &rhs)const{
return st==rhs.st?id<rhs.id:st<rhs.st;
}
}a[maxn];
int f[maxn<<2],id[maxn<<2];
void insert(int o,int l,int r,int pos,int val,int ID){
if(l==r){f[o]=val,id[o]=ID;return;}
int mid=l+r>>1;
if(pos<=mid)insert(o<<1,l,mid,pos,val,ID);
else insert(o<<1|1,mid+1,r,pos,val,ID);
f[o]=max(f[o<<1],f[o<<1|1]);
}
int query(int o,int l,int r,int x,int y,int val){
if(l==r)return id[o];
int mid=l+r>>1;
int ret=-1;
if(y<=mid){
if(f[o<<1]>=val)ret=query(o<<1,l,mid,x,y,val);
}else if(x>mid){
if(f[o<<1|1]>=val)ret=query(o<<1|1,mid+1,r,x,y,val);
}else{
if(f[o<<1]>=val)ret=query(o<<1,l,mid,x,mid,val);
if(ret==-1&&f[o<<1|1]>=val)ret=query(o<<1|1,mid+1,r,mid+1,y,val);
}
return ret;
}
void read_and_parse(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n+m;i++){
scanf("%d%d%d",&a[i].st,&a[i].ed,&a[i].t);
a[i].id=i;
d[++tot]=a[i].t;
}
sort(d+1,d+tot+1);
tot=unique(d+1,d+tot+1)-d-1;
sort(a+1,a+n+m+1);
for(int i=1;i<=n+m;i++)a[i].t=lower_bound(d+1,d+tot+1,a[i].t)-d;
}
void solve(){
for(int i=1;i<=n+m;i++){
if(a[i].id<=n)insert(1,1,tot,a[i].t,a[i].ed,a[i].id);
else ans[a[i].id-n]=query(1,1,tot,a[i].t,tot,a[i].ed);
}
for(int i=1;i<=m;i++)printf("%d ",ans[i]);
}
int main(){
read_and_parse();
solve();
return 0;
}
【CF160E】Buses and People的更多相关文章
- 【247】◀▶IEW-Unit12
Unit 12 Leisure Activities 1.Model1对应图片分析 2.Model1范文分析 The pie chart shows the six sporting activiti ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
随机推荐
- 查看自身公网ip的命令
curl ifconfig.me curl cip.cc curl ipinfo.io
- C#与Unity 数据存储
使用Json存储数据 1.创建Json文件,直接创建txt文件,将后缀名改为xx.json 2.Json文件的数据格式,中括号表示列表,即中括号下的每个逗号隔开的内容都是列表的每个元素,花括号表示对象 ...
- Unreal Engine 4 优化教程
本教程旨在帮助开发人员提升基于虚幻引擎(Unreal Engine*4 (UE4))开发的游戏性能.在教程中,我们对引擎内部及外部使用的一系列工具,以及面向编辑器的最佳实践加以概述,还提供了有助于提高 ...
- 在phpStrom中安装php代码格式化插件Php-cs-fixer
由于phpStrom原来的插件不再开源,现在转为使用Php-cs-fixer格式化代码.以下为在phpStrom中安装Php-cs-fixer的具体步骤. 安装安装很简单,下载php-cs-fixer ...
- jenkins和gitlab备份
#把/opt目录拷贝到10.0.0.31的/tmp下. rsync -avz /opt root@10.0.0.31:/tmp/ pull: rsync -avz root@10.0.0.31: ...
- NOIP2017 D2T3 题解
题面 这种数据范围不是乱搞dfs就是乱搞状压DP 首先应该通过任一方式求出a和b的值: 任意一条抛物线只用两头猪就可以确定,所以我们N^2枚举,并把在这两头猪的抛物线上的猪都存进状态state[i][ ...
- C++学习 之 继承(笔记)
1.继承基础: 继承就像是生物里的遗传与变异,即派生类(子代)从基类(父代)那里继承基类的某些特性(遗传),并在此基础上拥有自己的特性(变异). C++派生语法: class Base//定义一个基类 ...
- Vue的响应系统
随着 Vue 3.0 Pre Alpha 版本的公布,我们得以一窥其源码的实现.Vue 最巧妙的特性之一是其响应式系统,而我们也能够在仓库的 packages/reactivity 模块下找到对应的实 ...
- redis在php中实际应用-hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. 目录: 1.批量赋值:hmset,hmget,hgetall 可用于存储一条条数据,即一个 ...
- Python 入门 之 print带颜色输出
Python 入门 之 print带颜色输出 1.print带颜色输出书写格式: 开头部分: \033[显示方式; 前景色 ; 背景色 m 结尾部分: \033[0m 详解: 开头部分的三个参数: 显 ...