用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. 使用TensorBoard可视化工具

    title: 使用TensorBoard可视化工具 date: 2018-04-01 13:04:00 categories: deep learning tags: TensorFlow Tenso ...

  2. SSIS故障排除

    1.2015.09.10 SSIS部署到SQL Server上 JOB任务无法执行 说是sa账户没有执行权限 解决办法:1)SQL Server 启动时使用windows管理员账户登录.2)部署的数据 ...

  3. Android 那些年,处理getActivity()为null的日子

    在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是衣服在Act ...

  4. Codeforces 982 B. Bus of Characters(模拟一个栈)

    解题思路: 排序之后模拟一个栈(也可以用真的栈),时间复杂度o(n). 代码: #include <bits/stdc++.h> using namespace std; typedef ...

  5. C# AssemblyResolve事件可能不触发

    C# AssemblyResolve事件需要引用的dll的“复制本地”属性设置为False,如果为True,可能不会触发这个事件的处理函数. 我想设计一个自动加载分架构的C++/CLI的dll,用到了 ...

  6. SpringBoot学习笔记(14)----应用监控-HTTP方式

    SpringBoot提供了三种应用监控的方式 通过HTTP(最简单方便) 通过JMX 通过远程shell 这里就是用最简单的方式来使用SpringBoot的应用监控 首先引入依赖,pom文件如下 &l ...

  7. js+css实现全局loading加载

    js var Mask = function() { //定义一个Mask对象 this.btn = ["取消", "确定"], this.init = fun ...

  8. How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧

    个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...

  9. vmware vsphere出现“需要整合虚拟机磁盘”的告警处理方法(完整版)

    vmware vsphere出现“需要整合虚拟机磁盘”的告警 处理步骤: 1.选择对应虚机,快照——整合 (不行看下一条) 通常情况执行完第一步就好了 2.如果整合报错,提示文件锁定 2.1 新建快照 ...

  10. csv 模块的基本使用

    csv 模块专门用于读取和写入 csv 文件内容 以下主要讲在 python2 中的使用,在python3中有不同的地方,我会单独指出来 一般的excel表格可以保存为csv格式,然后就可以使用 cs ...