用set维护,(l,r,v),注意边界,保证了两个端点l,r一定有信号站

增加有三种可能,1.直接加(没有影响),2.将原本的一个区间变成两个 3.将原本的一个区间变成三个

删除有三种情况,1.全包含直接删 2.部分删除 ,要增加一个 3.部分删除要增加两个

code:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cctype>
#include<set>
#include<cmath>
using namespace std;
const int MAXX=200010;
const long long inff=2000000000000000000ll;
struct node
{
node(){}
node(long long a,long long b,long long c){l=a;r=b;v=c;}
long long l,r,v;
bool operator <(const node &a)const {
return l<a.l;
}
};
set<node>s;
int n;
long long w;
inline long long rd(){
long long x=0;bool f=0;
char c=getchar();
while(!isdigit(c)){
if(c=='-')f=1;
c=getchar();
}
while(isdigit(c)){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return f?-x:x;
}
inline void buld(long long l,long long r,long long v){
s.insert(node(l,r - (r - l) % v,v));
set<node>::iterator it=s.lower_bound(node(l,r - (r - l)%v,v)),ptr;
if(it!=s.begin()){
ptr=--it;
node p=*ptr;
if(ptr -> r >= l){
s.erase(ptr);
if(l-1 >= p.l)s.insert(node(p.l,l - 1 - (l - 1 - p.l) % p.v,p.v));
if(r+1 <= p.r){
long long lef;
if((r + 1 - p.l) % p.v == 0)lef = r + 1;
else lef=r + 1 + p.v - (r + 1 - p.l) % p.v;
s.insert(node(lef,p.r,p.v));
}
}
}
}
inline void del(long long l,long long r){
set<node>::iterator bg=s.upper_bound(node(l,r,1));
set<node>::iterator ed=s.upper_bound(node(r,r,1));
if(bg != s.begin())bg--;
for(set<node>::iterator it = bg;it != ed;){
set<node>::iterator ptr = it;
node p=*it;
it++;//注意要先++,因为之后会把他删掉
if(p.r >= l){
s.erase(ptr);
if(l - 1 >= p.l)s.insert(node(p.l,l - 1 - (l - 1 -p.l) % p.v,p.v));
if(r + 1 <= p.r){
long long lef ;
if((r + 1 - p.l) % p.v == 0) lef = r + 1 ;
else lef =r + 1 + p.v - (r + 1 - p.l) % p.v;
s.insert(node(lef,p.r,p.v));
}
}
}
}
inline long long query(long long x){
long long d;
if(s.size()==1)return 0;
set<node>::iterator nxt = s.lower_bound(node(x,x,1));
set<node>::iterator las = nxt;
if(las != s.begin())las--;
if(las -> r >= x && las -> l <= x){
long long lef = x - (x - las -> l) % las -> v;
long long rig = x + las -> v - (x - las -> l) % las -> v;
d=min(abs(x - lef) , abs(x - rig)); }else if(nxt -> l <= x && nxt -> r >= x){
long long lef = x - (x - nxt -> l) % nxt -> v;
long long rig = x + nxt -> v - (x - nxt -> l) % nxt -> v;
d=min(abs(x - lef) , abs(x - rig));
}else d=min(abs(las -> r - x),abs(nxt -> l - x));
long long ans = w - d * d;
return max(0ll,ans);
}
int main(){
freopen("cellphone.in","r",stdin);
freopen("cellphone.out","w",stdout);
n=rd();w=rd();
s.insert(node(inff,inff+1,1));
for(int i=1;i<=n;++i){
char s[20];
long long l,r,v,x;
scanf("%s",&s);
if(s[0]=='c'){
l=rd();r=rd();v=rd();
buld(l,r,v);
}else if(s[0]=='d'){
l=rd();r=rd();
del(l,r);
}else if(s[0]=='q'){
x=rd();
#ifndef LOCAL
printf("%lld\n",query(x));
#else
cout<<query(x)<<endl;
#endif
}
}
return 0;
}

JZOJ5821手机信号的更多相关文章

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

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

  2. test20180921 手机信号

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

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

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

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

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

  5. [set]JZOJ 5821 手机信号

    Description

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

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

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

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

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

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

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

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

随机推荐

  1. Win7 利用批处理文件结束进程

    @echo offtitle 结束进程正在进行... ::结束进程TeamViewer.exewmic process where name="TeamViewer.exe" ca ...

  2. matlab张量工具初步

    最近从桑迪亚实验室下载了张量工具包.但是不太会用. 很多网上的方法, addpath(pwd) cd met; addpath(pwd) savepath M=ones(4,3,2); X=tenso ...

  3. POJ 3320 Jessica's Reading Problem (尺取法,时间复杂度O(n logn))

    题目: 解法:定义左索引和右索引 1.先让右索引往右移,直到得到所有知识点为止: 2.然后让左索引向右移,直到刚刚能够得到所有知识点: 3.用右索引减去左索引更新答案,因为这是满足要求的子串. 4.不 ...

  4. select标签下option标签里value属性有什么用以及和text的区别

    转自:http://blog.csdn.net/summer_sy/article/details/54572398 1:value的用处 <select > <option val ...

  5. solarwinds之网络发现

    1.  首先需要添加网络发现   2.  使用public   3.  添加主机   4.  网络地址选择   5.  默认下一步   6.  运行发现   7.  扫描结构如下   8.  下一步 ...

  6. 3dmax实例教程-使用3ds Max 创建一个完整的场景

    本篇教程讲述了利用3ds max创建一个完整的场景. 灵感来源:当我在遇到一些事情睡不着觉的时候我便在努力想象一些别的事情,于是我便想到了这个场景,其实对于我的这个角色我即没有参考图也没有草稿图,有的 ...

  7. CDR X6低价还能持续多久?官方回应18年元旦过后要涨价

    目前,CDR X6特价活动,从双十二的到18年的元旦,火热程度一直屡刷新高,究其原因,其实不是大家不需要,只是这个平面设计软件价格实在太高(CDR X8/8200:CDR 2017/9500一套),尤 ...

  8. (WC2018模拟十二)【FJOI2016集训Day7T1】挑选子序列

    题解: 这题太神仙了,先咕着,放个令人****的官方题解(精确覆盖问题是NP完全问题啊摔) Dancing Link X学习资料:QAQ TAT qwq Orz Donald Knuth大神... p ...

  9. ES6学习笔记(二十)Module 的加载实现

    上一章介绍了模块的语法,本章介绍如何在浏览器和 Node 之中加载 ES6 模块,以及实际开发中经常遇到的一些问题(比如循环加载). 1.浏览器加载 传统方法 HTML 网页中,浏览器通过<sc ...

  10. LightOJ-1220 Mysterious Bacteria 唯一分解定理 带条件的最大公因数

    题目链接:https://cn.vjudge.net/problem/LightOJ-1220 题意 给x=y^p,问p最大多少 注意x可能负数 思路 唯一分解定理,求各素因数指数的GCD 注意负数的 ...