Description

 

Input

第一行由一个空格隔开的两个正整数 m, c,意义见题目描述。
接下来 m 行,每行可能有以下形式:
construct l r v 代表发生了第一种事件;
destruct l r 代表发生了第二种事件;
query x 代表发生了第三种事件。 

Output

对于每个 query 操作,请输出一行一个整数代表此时坐标 x 处的信号强度。
 

Sample Input

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

Sample Output

0
975
0
9999
9775
9984
 

Data Constraint

分析

用set维护三元组(l,r,v),然后对于新加入的区间和原区间重叠时,劈开与新区间相交或重合的部分即可

然后删除类似,查询有在区间内和区间外两种情况

这是第一次用set写题呢

#include <iostream>
#include <cstdio>
#include <set>
#include <cstring>
using namespace std;
struct Ivs {
int l,r,v;
bool operator < (const Ivs a) const {
return l<a.l||l==a.l&&r<a.r||l==a.l&&r==a.r&&v<a.v;
}
};
set<Ivs> s;
long long c;
int m;
char order[30]; void Insert(int l,int r,int v) {
s.insert((Ivs){l,r-(r-l)%v,v});
set<Ivs>::iterator iter=s.lower_bound((Ivs){l,r-(r-l)%v,v}),p=iter;
p--;
if (iter!=s.begin()) {
Ivs pstar=*p;
if (pstar.r>=l) {
s.erase(p);
if (l-1>=pstar.l)
s.insert((Ivs){pstar.l,l-1-(l-1-pstar.l)%pstar.v,pstar.v});
if (r+1<=pstar.r)
s.insert((Ivs){r+1+((r+1-pstar.l)%pstar.v?pstar.v-(r+1-pstar.l)%pstar.v:0),pstar.r,pstar.v});
}
}
} void Destroy(int l,int r) {
s.insert((Ivs){l,r,-1});
set<Ivs>::iterator iter=s.lower_bound((Ivs){l,r,-1}),p=iter,n=iter,rq;
p--;n++;
if (iter!=s.begin()) {
Ivs pstar=*p;
if (pstar.r>=l) {
s.erase(p);
if (l-1>=pstar.l)
s.insert((Ivs){pstar.l,l-1-(l-1-pstar.l)%pstar.v,pstar.v});
if (r+1<=pstar.r)
s.insert((Ivs){r+1+((r+1-pstar.l)%pstar.v?pstar.v-(r+1-pstar.l)%pstar.v:0),pstar.r,pstar.v});
}
}
while (n!=s.end()) {
Ivs nstar=*n;rq=n;n++;
if (nstar.l<=r) {
s.erase(rq);
if (r+1<=nstar.r)
s.insert((Ivs){r+1+((r+1-nstar.l)%nstar.v?nstar.v-(r+1-nstar.l)%nstar.v:0),nstar.r,nstar.v});
}
else break;
}
s.erase((Ivs){l,r,-1});
} long long Query(int x) {
long long mx=1e9+1;
s.insert((Ivs){x,x,-1});
set<Ivs>::iterator iter=s.lower_bound((Ivs){x,x,-1}),p=iter,n=iter;
p--;n++;
if (iter!=s.begin()) {
Ivs pstar=*p;
mx=min(mx,
(long long)(x<=pstar.r?min((x-pstar.l)%pstar.v,pstar.v-(x-pstar.l)%pstar.v)
:x-pstar.r));
}
if (n!=s.end()) mx=min(mx,(long long)(*n).l-x);
s.erase((Ivs){x,x,-1});
return max(0ll,c-mx*mx);
} int main() {
freopen("cellphone.in","r",stdin);
freopen("cellphone.out","w",stdout);
scanf("%d%lld",&m,&c);
while (m--) {
int l,r,x;
scanf("%s%d",&order,&l);
if (order[0]=='q') printf("%lld\n",Query(l));
if (order[0]=='c') {
scanf("%d%d",&r,&x);
Insert(l,r,x);
}
if (order[0]=='d') {
scanf("%d",&r);
Destroy(l,r);
}
}
fclose(stdin);fclose(stdout);
}

[set]JZOJ 5821 手机信号的更多相关文章

  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. 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. 高并发之Phaser、ReadWriteLock、StampedLock

    本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock.CountDownLatch.CyclicBarrier.Phaser.ReadWriteLock.Stam ...

  2. Pygame 游戏开发 All In One

    Pygame 游戏开发 All In One Pygame Pygame is a library for digital arts, games, music, making, and a comm ...

  3. zhihu level

    zhihu level https://www.zhihu.com/creator/account/growth-level refs xgqfrms 2012-2020 www.cnblogs.co ...

  4. How to build a sortable table in native js?

    How to build a sortable table in native/vanilla js? H5 DnD https://developer.mozilla.org/zh-CN/docs/ ...

  5. GitHub for VSCode

    GitHub for VSCode A first-party GitHub OAuth application (GitHub for VSCode) with repo and workflow ...

  6. UI Design & App & Free Icons

    UI Design & App & Free Icons icons8 https://icons8.com https://icons8.com/ouch Ouch可以帮助那些不进行 ...

  7. PM2 in depth

    PM2 in depth ecosystem.config.js module.exports = { apps : [{ name: "app", script: ". ...

  8. Objec.assign & bug

    Objec.assign & bug shallow copy https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Referenc ...

  9. 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...

  10. Tawk.to工具使用攻略--如何让访客通过tawk.to联系时先填写邮箱、联系方式等信息

    Tawk.to工具使用攻略--如何让访客通过tawk.to联系时先填写邮箱.联系方式等信息 您在使用tawk.to的时候,是否遇到当访客联系您时,您未能及时查看到tawk.to的消息,后续想要再联系访 ...