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;
}

原文地址:https://www.cnblogs.com/ARTlover/p/9780247.html

时间: 2024-08-30 00:49:19

JZOJ5821手机信号的相关文章

手机信号理论基础以及思考

手机信号的频率范围: GSM900M: 890MHz-915MHz(上行) 935MHz-960MHz(下行) CDMA800M: 825MHz-835MHz(上行) 870MHz-880MHz(下行) DCS1800M: 1850MHz-1910MHz(上行) 1930MHz-1990MHz(下行) PCS1900M: 1850MHz-1910MHz(上行) 1930MHz-1990MHz(下行) 目前的移动电话系统工作频率在800到1800MHz之间.很重要的一点是不要将这一射频场与电离辐射

手机信号

手机信号 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 12   Accepted Submission(s) : 9 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 现在在市面上流传了一款功能极简的手机,在手机上用一个 7×7 的显

下雨天会影响手机信号,终于知道了原因。

1:对于电磁波来讲雨水会使其衰减,称作"雨衰",但是不同频率的电磁波对于雨水的穿透率不同,就像有人说的你的手机也有问题.下雨天尽量不要打手机,闪电时打手机可能会导致触电,由于雷电的干扰,手机的无线频率跳跃性增强,这容易诱发雷击和烧机等事故.但一般来说,公共聚居地都装有避雷装置,人们处在这种环境中相对安全,雷电仅仅会干扰手机信号,顶多也仅是损坏芯片,对人体不会造成致命伤害.而一旦处于空旷地带时,人和手机就成为地面明 显的凸起物,手机极有可能成为雷雨云选择的放电对象.一定要加强有关避雷尤其

5G来了,能改变手机信号差的顽疾吗?

在办公楼.医院.车站.大型商超这种地方,手机信号简直就是灾难,5G来了能有所改善吗? 谈到5G,业内有个流行的说法:4G改变生活.5G改变社会.6月,5G商用牌照的发放宣告了我国正式进入了5G商用元年.可以预见无论是芯片.网络,还是终端领域,都在快速并行的发展.作为网络服务的提供方,5G对于运营商的重要性不言而喻.而对于我们普通用户来说,我们的印象仅限于3G比2G快,而4G比3G网速更快,那么5G来了肯定能带来更多的改变. 至于手机信号在复杂的环境中,信号为什么会很弱?首先要搞清楚我们的通信,主

iOS手机信号网络监听

//设置网络监听 - (void)monitorNetworking { //监听网络状态 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; //显然是枚举值 /* typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { AFNetworkReachabilityStatusUnknown = -1,//未识别的网络

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

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

微软手机的信号显示

微软手机的信号显示 微软近日推出了一款功能极简的手机,在手机上用一个包含了 7×77 \times 77×7 个像素的区域来显示手机信号.满信号的时候显示如下: 每一格信号(第 i(1≤i≤5)i(1 \le i \le 5)i(1≤i≤5) 格信号有 iii 个-)代表 20%20\%20% 的信号强度,不足一格信号的部分不显示.同时会在右上角显示当前的网络传输模式.在信号强度不低于 90%90\%90% 的时候显示4G:当信号低于 90%90\%90%.不低于 60%60\%60% 的时候显

手机卫士05_背景资源_listview优化_进程查看

1.1添加黑名单的ui 拦截类型修改为一组RadioGroup,里面三个RadioButton,RadioGroup可以指定排列方式 其它的都简单,记得定义好ID,顺便抽取点样式就可以了,最后两个Button可以设置状态选择器. 如果不确定LinearLayout有多高,就设置为0dp,权重为1,这样它会自己去填充空白,而不是覆盖. 1.2 电话号码的文本输入框 1.2.1安卓下特殊的图片资源 .9.png 图片 安卓自带的工具:sdk-tools-draw0-pathch 如果是在两侧选定黑点

谁引爆了手机里的电池?

现在的智能手机,已经变得无处不在,同所有革命性的产品一样,它不可避免地成为双刃剑,正如汽车的出现,让人类出行变得简单,但却带来一系列的问题:尾气污染.堵车问题,以及长期开车之后的健康问题,最惨烈地还是交通事故,特别是那些重型货车引发的事故,人的脑袋真地会被压瘪,而且会冒出白色的东西来:手机的出现.流行.风靡,之于人类社会的影响也大致如此,智能手机让沟通变得简单,信息的获取几乎是随时随地,老板们只需建立一个微信Group,就能轻松地把你的工作延伸到8小时之后,延伸到办公区之外,而Uber.滴滴.百