题目描述

输入

输出

样例输入

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

样例输出

0
975
0
9999
9775
9984
0

提示

题解

这道题给你三种操作(这道题用set维护区间)

对于construct操作,我们可以发现加入的区间要么和所有的区间都不相交,要么就是区间的大小比某个区间的v还要小

construct操作读入的x,y我们可以可以把y改成x+(y-x)/v*v(最后一个信号站的位置)

对于destruct操作,我们判断一下左右端点是否把其他的区间截断了

对于query操作,我们只要找一下离这个点最近的一个区间就可以了

具体细节可以看一下代码

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
int x,y,v;
bool operator <(const node &a) const{
return x<a.x;
}
};
typedef multiset<node>::iterator It;
int m,l,r,v,x,y;
ll c;
char s[];
multiset<node> q;
int calc(int x,int y,int v){ return x+(y-x)/v*v; }
void solve_c(){
scanf("%d%d%d",&x,&y,&v);
y=calc(x,y,v);
It point=q.upper_bound((node){x,,});
if (point!=q.begin()){
point--;
int st=point->x,ed=point->y;
if (st<x&&ed>y){
int stp=point->v;
q.erase(point);
q.insert((node){st,calc(st,x,stp),stp});
if (st!=ed)
q.insert((node){calc(st,x,stp)+stp,ed,stp});
}
}
q.insert((node){x,y,v});
}
void solve_d(){
scanf("%d%d",&x,&y);
It point=q.lower_bound((node){x,,});
if (point!=q.begin()){
point--;
int st=point->x,ed=point->y;
if (st<x&&ed>=x){
int stp=point->v;
q.erase(point);
q.insert((node){st,calc(st,x-,stp),stp});
if (ed>y)
q.insert((node){calc(st,r,stp)+stp,ed,stp});
}
}
point=q.upper_bound((node){y,,});
if (point!=q.begin()){
point--;
int st=point->x,ed=point->y;
if (st<=y&&ed>y){
int stp=point->v;
q.erase(point);
q.insert((node){calc(st,y,stp)+stp,ed,stp});
}
}
q.erase(q.lower_bound((node){x,,}),q.upper_bound((node){y,,}));
}
void solve_q(){
scanf("%d",&x);
int d=1e9;
It point=q.lower_bound((node){x,,});
if (point!=q.end()) d=min(d,point->x-x);
if (point!=q.begin()){
point--;
int st=point->x,ed=point->y;
if (ed>=x){
int stp=point->v;
d=min(d,x-calc(st,x,stp));
if (st!=ed) d=min(d,calc(st,x,stp)+stp-x);
} else d=min(d,x-point->y);
}
if (d==1e9) puts("");
else printf("%lld\n",max(0ll,c-(ll)d*d));
}
int main(){
scanf("%d%lld",&m,&c);
for (int i=;i<=m;i++){
scanf("%s",s);
if (s[]=='q') solve_q(); else
if (s[]=='c') solve_c(); else
if (s[]=='d') solve_d();
}
return ;
}

YYHS-手机信号的更多相关文章

  1. "手机信号放大器" 让手机信号增强的办法

    我的住处信号及其的差,电话基本打不进来,放大器的话便宜的也得一百多,于是自己尝试各种办法让自己的手机有信号,于是奇迹般的成功了: 将手机放于铁缸内,并45度角斜放,刚好淹没手机为佳.于是信号奇迹般的3 ...

  2. test20180921 手机信号

    题意 分析 我们用形如(l, r, v) 的三元组描述一个区间,这个区间中从l 到r 每隔v 有一个信号站. 考虑一次construct 操作,会添加一个新的区间,并可能将一个已经存在的区间分裂为两个 ...

  3. JZOJ5821手机信号

    用set维护,(l,r,v),注意边界,保证了两个端点l,r一定有信号站 增加有三种可能,1.直接加(没有影响),2.将原本的一个区间变成两个 3.将原本的一个区间变成三个 删除有三种情况,1.全包含 ...

  4. Android Telephony —— 手机信号实时变化源码分析过程记录

    源码版本:4.4 跳过InCallActivity等UI实现.先看service以及底层. 1, 在frameworks/opt下面会发现如下文件列表: ./telephony/src/java/co ...

  5. 手机信号G、E、O、3G代表什么意思?

    G指GPRS,是2.5G网络,属于GSM网络,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS的传输速率可提升至56甚至114Kbps,已经将2017年确定为关闭GSM网络 ...

  6. [set]JZOJ 5821 手机信号

    Description

  7. android 获取手机GSM/CDMA信号信息,并获得基站信息

    本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如 ...

  8. 手机定位室内gps没信号

    手机定位一般分3种,gps,手机信号基站,上网地点,其中gps信号一般只有户外有,所以在室外的时候只开启定位和gps就可以定位了,但是在室内没有gps的情况,就需要开网络定位了.

  9. 手机信号强度单位dB、dBm和asu

    dB.dBm都是功率增益的单位,不同之处如下: dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时,按下面的计算公式:10log( ...

  10. 酷派大神F2系列使用QPST进行nv备份和恢复,解决无信号问题(附备份文件)

    测试机器: 大神F2联通版 8675_W00 系统COOLUI55     写贴原因: 自己无意间刷错了包,结果手机无信号,进入工程模式怎么设置都没有用.尝试过系统还原(备份过).刷新的ROM.线刷, ...

随机推荐

  1. UX是什么?

    UX(用户体验),操作过安卓手机或者苹果手机的系统吧?那么操作过程的整体体验就叫UX,而操作过程中所看到的界面颜色啦,图案,字体大小啦等等都属于UI设计,而交互设计(Interaction Desig ...

  2. 九度OJ 1014 排名

    #include <iostream> #include <string.h> #include <sstream> #include <math.h> ...

  3. Oracle数据库中直方图对执行计划的影响

    在Oracle数据库中,CBO会默认目标列的数据在其最小值low_value和最大值high_value之间均匀分布,并按照均匀分布原则,来计算目标列 施加查询条件后的可选择率以及结果集的cardin ...

  4. 201521123044 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  5. 201521123006 《java程序设计》 第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) **1.2 ...

  6. 201521123062《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...

  7. Hyperledger Fabric 1.0 从零开始(三)——环境构建(内网/准离线)

    有公网环境的服务器可以直接看 Hyperledger Fabric 1.0 从零开始(二)--环境构建(公网) ,本篇内容与上篇相似,只不过环境搭建需要在内网下,也就是网络被限制的情况下. 1:环境构 ...

  8. Excel开发之旅(二)----数据的读写

    1.要实现数据的读写,首先,我们需要添加引用: using Excel=Microsoft.Office.Interop.Excel; 直接在项目中添加即可. 2.给3个按钮添加响应事件,工程代码截图 ...

  9. 利用原生js制做数据管理平台,适合初学者学习

    摘要:数据管理平台在当今社会中运用十分广泛,我们在应用过程中,要对数据进行存储,管理,以及删除查询等操作,而我们在实际设计的时候,大牛们大多用到的是JQuery,而小白对jq理解也较困难,为了让大家回 ...

  10. oracle pl/sql 包

    包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_sal ...