[set]JZOJ 5821 手机信号
Description
Input
接下来 m 行,每行可能有以下形式:
construct l r v 代表发生了第一种事件;
destruct l r 代表发生了第二种事件;
query x 代表发生了第三种事件。
Output
Sample Input
11 10000
query 5
construct 5 500 100
query 500
query 1000
construct 10 90 5
query 44
destruct 44 66
query 55
construct 50 60 3
query 46
query 6000
Sample Output
0
975
0
9999
9775
9984
0
Data Constraint
分析
用set维护三元组(l,r,v),然后对于新加入的区间和原区间重叠时,劈开与新区间相交或重合的部分即可
然后删除类似,查询有在区间内和区间外两种情况
这是第一次用set写题呢

#include <iostream>
#include <cstdio>
#include <set>
#include <cstring>
using namespace std;
struct Ivs {
int l,r,v;
bool operator < (const Ivs a) const {
return l<a.l||l==a.l&&r<a.r||l==a.l&&r==a.r&&v<a.v;
}
};
set<Ivs> s;
long long c;
int m;
char order[30]; void Insert(int l,int r,int v) {
s.insert((Ivs){l,r-(r-l)%v,v});
set<Ivs>::iterator iter=s.lower_bound((Ivs){l,r-(r-l)%v,v}),p=iter;
p--;
if (iter!=s.begin()) {
Ivs pstar=*p;
if (pstar.r>=l) {
s.erase(p);
if (l-1>=pstar.l)
s.insert((Ivs){pstar.l,l-1-(l-1-pstar.l)%pstar.v,pstar.v});
if (r+1<=pstar.r)
s.insert((Ivs){r+1+((r+1-pstar.l)%pstar.v?pstar.v-(r+1-pstar.l)%pstar.v:0),pstar.r,pstar.v});
}
}
} void Destroy(int l,int r) {
s.insert((Ivs){l,r,-1});
set<Ivs>::iterator iter=s.lower_bound((Ivs){l,r,-1}),p=iter,n=iter,rq;
p--;n++;
if (iter!=s.begin()) {
Ivs pstar=*p;
if (pstar.r>=l) {
s.erase(p);
if (l-1>=pstar.l)
s.insert((Ivs){pstar.l,l-1-(l-1-pstar.l)%pstar.v,pstar.v});
if (r+1<=pstar.r)
s.insert((Ivs){r+1+((r+1-pstar.l)%pstar.v?pstar.v-(r+1-pstar.l)%pstar.v:0),pstar.r,pstar.v});
}
}
while (n!=s.end()) {
Ivs nstar=*n;rq=n;n++;
if (nstar.l<=r) {
s.erase(rq);
if (r+1<=nstar.r)
s.insert((Ivs){r+1+((r+1-nstar.l)%nstar.v?nstar.v-(r+1-nstar.l)%nstar.v:0),nstar.r,nstar.v});
}
else break;
}
s.erase((Ivs){l,r,-1});
} long long Query(int x) {
long long mx=1e9+1;
s.insert((Ivs){x,x,-1});
set<Ivs>::iterator iter=s.lower_bound((Ivs){x,x,-1}),p=iter,n=iter;
p--;n++;
if (iter!=s.begin()) {
Ivs pstar=*p;
mx=min(mx,
(long long)(x<=pstar.r?min((x-pstar.l)%pstar.v,pstar.v-(x-pstar.l)%pstar.v)
:x-pstar.r));
}
if (n!=s.end()) mx=min(mx,(long long)(*n).l-x);
s.erase((Ivs){x,x,-1});
return max(0ll,c-mx*mx);
} int main() {
freopen("cellphone.in","r",stdin);
freopen("cellphone.out","w",stdout);
scanf("%d%lld",&m,&c);
while (m--) {
int l,r,x;
scanf("%s%d",&order,&l);
if (order[0]=='q') printf("%lld\n",Query(l));
if (order[0]=='c') {
scanf("%d%d",&r,&x);
Insert(l,r,x);
}
if (order[0]=='d') {
scanf("%d",&r);
Destroy(l,r);
}
}
fclose(stdin);fclose(stdout);
}
[set]JZOJ 5821 手机信号的更多相关文章
- "手机信号放大器" 让手机信号增强的办法
我的住处信号及其的差,电话基本打不进来,放大器的话便宜的也得一百多,于是自己尝试各种办法让自己的手机有信号,于是奇迹般的成功了: 将手机放于铁缸内,并45度角斜放,刚好淹没手机为佳.于是信号奇迹般的3 ...
- test20180921 手机信号
题意 分析 我们用形如(l, r, v) 的三元组描述一个区间,这个区间中从l 到r 每隔v 有一个信号站. 考虑一次construct 操作,会添加一个新的区间,并可能将一个已经存在的区间分裂为两个 ...
- JZOJ5821手机信号
用set维护,(l,r,v),注意边界,保证了两个端点l,r一定有信号站 增加有三种可能,1.直接加(没有影响),2.将原本的一个区间变成两个 3.将原本的一个区间变成三个 删除有三种情况,1.全包含 ...
- Android Telephony —— 手机信号实时变化源码分析过程记录
源码版本:4.4 跳过InCallActivity等UI实现.先看service以及底层. 1, 在frameworks/opt下面会发现如下文件列表: ./telephony/src/java/co ...
- 手机信号G、E、O、3G代表什么意思?
G指GPRS,是2.5G网络,属于GSM网络,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS的传输速率可提升至56甚至114Kbps,已经将2017年确定为关闭GSM网络 ...
- android 获取手机GSM/CDMA信号信息,并获得基站信息
本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如 ...
- 手机定位室内gps没信号
手机定位一般分3种,gps,手机信号基站,上网地点,其中gps信号一般只有户外有,所以在室外的时候只开启定位和gps就可以定位了,但是在室内没有gps的情况,就需要开网络定位了.
- 手机信号强度单位dB、dBm和asu
dB.dBm都是功率增益的单位,不同之处如下: dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时,按下面的计算公式:10log( ...
- 酷派大神F2系列使用QPST进行nv备份和恢复,解决无信号问题(附备份文件)
测试机器: 大神F2联通版 8675_W00 系统COOLUI55 写贴原因: 自己无意间刷错了包,结果手机无信号,进入工程模式怎么设置都没有用.尝试过系统还原(备份过).刷新的ROM.线刷, ...
随机推荐
- webpack remove console.log
webpack remove console.log https://stackoverflow.com/questions/41040266/remove-console-logs-with-web ...
- vscode Paste Image插件使用
Paste Image 在编写md需要插入图片,这个插件可以将粘贴板的图片保存到本地资源 假如我在/readme.md中编写文档,我需要将粘贴板的图片放在/images/下面,配置两个关键配置即可: ...
- TypeScript——02——TS基本数据类型介绍和使用
一,TS的数据类型 ES6的数据类型: 6种基本数据类型 Boolean Number String Symbol undefined null 3种引用类型 Array Function Objec ...
- 让 gRPC 提供 REST 服务
让 gRPC 提供 REST 服务 Intro gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计. gRPC 基于 HTTP/2 标准设计,带来诸如双向流.流控.头部 ...
- linux驱动系列之程序反汇编
摘抄网页:http://www.169it.com/article/330129798173630299.html 参考网页:http://www.cppblog.com/liu1061/articl ...
- Linux之根目录说明
文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法.操作系统中负责管理和存储文件信息的软件 ...
- ElasticSearch URI 查询
公号:码农充电站pro 主页:https://codeshellme.github.io 1,URI 查询格式 URI 查询的一般格式如下: GET /index_name/_search?q=key ...
- Sqoop 数据迁移工具
Sqoop 数据迁移工具 sqoop : SQL to hadOOP 两个功能: 1. RDB 向HDFS导入 2. HDFS向RDB导入 注:拷贝mysql-connector.jar 和 json ...
- 2021 年学习 React 的所需要的 JavaScript 基础
在理想的情况中,您可以先了解所有有关 JavaScript 和 web 开发的知识,然后再深入了解React. 但是,我们没有办法这样,如果等你把所有 JavaScript 的知识都掌握了再去学习 R ...
- go的循环
目录 go的循环 一.语法 二.语法简写 1.省略第一部分 2.省略第二部分 3.省略第三部分 4.全省略:死循环 5.终极写法,简洁变形 go的循环 Go中只有for循环,没有while循环.因为w ...