JZOJ5821手机信号
用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手机信号的更多相关文章
- "手机信号放大器" 让手机信号增强的办法
我的住处信号及其的差,电话基本打不进来,放大器的话便宜的也得一百多,于是自己尝试各种办法让自己的手机有信号,于是奇迹般的成功了: 将手机放于铁缸内,并45度角斜放,刚好淹没手机为佳.于是信号奇迹般的3 ...
- test20180921 手机信号
题意 分析 我们用形如(l, r, v) 的三元组描述一个区间,这个区间中从l 到r 每隔v 有一个信号站. 考虑一次construct 操作,会添加一个新的区间,并可能将一个已经存在的区间分裂为两个 ...
- 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网络 ...
- [set]JZOJ 5821 手机信号
Description
- 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.线刷, ...
随机推荐
- 中文版 R-FCN: Object Detection via Region-based Fully Convolutional Networks
R-FCN: Object Detection via Region-based Fully Convolutional Networks 摘要 我们提出了基于区域的全卷积网络,以实现准确和高效的目标 ...
- 关于github里readme编辑的方法
实验室的老师昨天改完论文发我后,说按照例子改.于是才发现github里readme编辑满满的极客思维. 看了一下csdn给的教程 https://blog.csdn.net/Kaitiren/arti ...
- 【参考】.class文件的JDK编译版本查看
使用 UltraEdit 打开 .class 文件,第一行内容: 00000000h: CA FE BA BE 00 00 00 32 00 A9 07 00 02 01 00 37 ; 漱壕... ...
- eclipse01
http://blog.csdn.net/luman1991/article/category/6354903
- ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat
1. 监控和管理Broker Web Console 方式:直接访问ActiveMQ的管理页面:http://localhost:8161/admin,默认的用户名和密码是admin/admin.具体 ...
- yii2.0 利用Excel类做导入导出
1.在 common 目录下 创建一个 components 将 Classes目录(改名为PHPExcel)和PHPExcel.php 放在新创建的目录下.再在 components 下创建一个Co ...
- new 一个对象的时候发生了什么
// 资料一: 摘抄自js高级程序设计(第三版)145页: 要创建Person的新实例,必须使用new操作符.以这种方式调用构造函数实际上会经历以下4个步骤: (1)创建一个新对象: (2)将构造函数 ...
- Spring jar包功能
1.spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.spring ...
- UVA-10003 Cutting Sticks 动态规划 找分界点k的动规
题目链接:https://cn.vjudge.net/problem/UVA-10003 题意 有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度. 问有什么样的 ...
- mariadb数据库基础知识及备份
数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理 ...