用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. C#线程调用带参数的方法,给控件赋值

    System.Threading.Thread thread = new System.Threading.Thread(() => { //各种业务 //定义一个委托 public deleg ...

  2. bower 代理

    bower 设置: 修改 .bowerrc 文件(如无则新增): { "proxy": "http://proxy.mysite.com:8080", &quo ...

  3. 《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示

    pushf 和 popf pushf 的功能是将标志寄存器的值压栈,而 popf 是从栈中弹出数据,输入标志寄存器. pushf 和 popf,为直接访问寄存器提供了方法. 格式 pushf popf ...

  4. Vue学习之v-if与v-show的区别

    v-if和v-show具有类似的功能,不过v-if才是真正的条件渲染,他会根据表达式适当的销毁或重建元素及绑定事件或子组件.若表达式初始值为false,则一开始元素或组件不会渲染,只有当第一次为真时, ...

  5. vue项目的webpack4.X配置

    这两天摆弄webpack,躺过很多坑,直到今天看了一位博主的文章才得以解决.他对配置中的各个部分做说明. 下面的配置99.9%抄自博主: https://www.cnblogs.com/nianyif ...

  6. root of factory hierarchy

    项目编译错误! project---->clean

  7. mariadb 视图 事务 索引 外键

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦   假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...

  8. Laravel修炼:服务容器绑定与解析

    前言   老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头皮看下去(虽然到现在我还有很多 ...

  9. Python 语言中经常有疑惑的地方

    *)关于for循环中range(2),i到底是从0还是1开始.特别是在用数组的长度作为range的参数的时候经常会犯糊涂 #首先 >>> for i in range(5): ... ...

  10. 洛谷 P1373 小a和uim之大逃离 (差值型dp总结)

    这道题和多米诺骨牌那道题很像 ,都是涉及到差值的问题. 这道题是二维的,同时要取模. 这种题,因为当前的决策有后效性,会影响到差值,所以直接把 差值作为维度,然后计算答案的时候把差值为0的加起来就行了 ...