BZOJ 3938 Robot(超哥线段树)

题目大意:一条数轴上有n个机器人,对其进行m次操作。操作t_i commond k_i x_i (1≤k_i≤n)表示ti时刻将第ki个机器人的速度变为正方向上xi格每秒;操作t_i query则是询问ti时刻离原点最远的机器人到原点的距离(t1≤t2≤t3≤…≤tm,若同一时间发生多次操作,则按读入顺序依次执行)

题目链接:BZOJ3938

题解:以时间为x轴,位置坐标为y轴,commond操作相当于在其中加入一段直线,query操作就是询问某一横坐标对应的y的最大值或最小值的绝对值。离散时间建两棵线段树,分别维护最上方和最下方的线段。超哥线段树简单题。

code(第一棵超哥线段树,代码参考大神咯T^T,加了一点注释,算是我自己对超哥线段树(标记永久化?)的理解)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 600005
using namespace std;
inline int read()
{
    char c=getchar(); int num=0,f=1;
    while (c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }
    while (c>='0'&&c<='9') { num=num*10+c-'0'; c=getchar(); }
    return num*f;
}
inline long long readl()
{
    char c=getchar(); long long num=0,f=1;
    while (c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }
    while (c>='0'&&c<='9') { num=num*10+c-'0'; c=getchar(); }
    return num*f;
}
struct opt{
    int op,id;
    long long k,tm;
}q[N];
long long tagk[N<<2],tagb[N<<2],Tagk[N<<2],Tagb[N<<2];
long long nowk[100005],nowb[100005],b[N],ans1,ans2;
int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值