BZOJ 3938 Robot
Description
Input
Output
Sample Input
-20 0 20 100
10 command 1 10
20 command 3 -10
30 query
40 command 1 -30
50 query
Sample Output
280
HINT
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
typedef long long lol;
struct ZYYS
{
lol l,r,k,id,b;
};
struct rubbish
{
lol t,k,id;
bool kind;
}q[];
struct caiji
{
int p,x;
}b[];
struct Line
{
lol k,b;
bool id;
}tree1[],tree2[];
lol h[],nowb[],nowk[],a[];
lol ansmax,ansmin,T;
int n,m,num,size;
char ch[];
lol gi()
{
lol x=,flag=;
char c=getchar();
while (c<''||c>'')
{
if (c=='-') flag=-;
c=getchar();
}
while (c>=''&&c<='')
{
x=x*+c-'';
c=getchar();
}
return x*flag;
}
bool pd(Line a,Line b,lol x)
{
return a.k*x+a.b>b.k*x+b.b;
}
double cross(Line a,Line b)
{
return (a.b-b.b)/(1.0*(b.k-a.k));
}
lol cal(Line a,lol x)
{
return a.k*x+a.b;
}
void add_max(int rt,int l,int r,Line x)
{
if (l>r) return;
if (!tree1[rt].id)
{
tree1[rt]=x;
return;
}
lol f1=cal(x,h[l]);lol f2=cal(tree1[rt],h[l]);
lol f3=cal(x,h[r]);lol f4=cal(tree1[rt],h[r]);
if (f1<=f2&&f3<=f4) return;
if (f1>=f2&&f3>=f4)
{tree1[rt]=x;return;}
int mid=(l+r)/;
double p=cross(tree1[rt],x);
if (f1>=f2)
{
if (p<=h[mid]) add_max(rt<<,l,mid,x);
else add_max(rt<<|,mid+,r,tree1[rt]),tree1[rt]=x;
}
else
{
if (p>h[mid]) add_max(rt<<|,mid+,r,x);
else add_max(rt<<,l,mid,tree1[rt]),tree1[rt]=x;
}
}
void add_min(int rt,int l,int r,Line x)
{
if (l>r) return;
if (!tree2[rt].id)
{
tree2[rt]=x;
return;
}
lol f1=cal(x,h[l]);lol f2=cal(tree2[rt],h[l]);
lol f3=cal(x,h[r]);lol f4=cal(tree2[rt],h[r]);
if (f1>=f2&&f3>=f4) return;
if (f1<=f2&&f3<=f4)
{tree2[rt]=x;return;}
int mid=(l+r)/;
double p=cross(tree2[rt],x);
if (f1<=f2)
{
if (p<=h[mid]) add_min(rt<<,l,mid,x);
else add_min(rt<<|,mid+,r,tree2[rt]),tree2[rt]=x;
}
else
{
if (p>h[mid]) add_min(rt<<|,mid+,r,x);
else add_min(rt<<,l,mid,tree2[rt]),tree2[rt]=x;
}
}
void update_max(int rt,int l,int r,int L,int R,Line x)
{
if (L>R) return;
if (l>r) return;
if (l>=L&&r<=R)
{
add_max(rt,l,r,x);
return;
}
int mid=(l+r)/;
if (L<=mid) update_max(rt<<,l,mid,L,R,x);
if (R>mid) update_max(rt<<|,mid+,r,L,R,x);
}
void update_min(int rt,int l,int r,int L,int R,Line x)
{
if (L>R) return;
if (l>r) return;
if (l>=L&&r<=R)
{
add_min(rt,l,r,x);
return;
}
int mid=(l+r)/;
if (L<=mid) update_min(rt<<,l,mid,L,R,x);
if (R>mid) update_min(rt<<|,mid+,r,L,R,x);
}
void query_max(int rt,int l,int r,int x)
{
if (l>r) return;
if (tree1[rt].id) ansmax=max(ansmax,cal(tree1[rt],h[x]));
//cout<<ansmax<<endl;
if (l==r)
{
return ;
}
int mid=(l+r)/;
if (x<=mid) query_max(rt<<,l,mid,x);
else query_max(rt<<|,mid+,r,x);
return ;
}
void query_min(int rt,int l,int r,int x)
{
if (l>r) return ;
if (tree2[rt].id)
ansmin=min(ansmin,cal(tree2[rt],h[x]));
//cout<<ansmin<<endl;
if (l==r)
{
return ;
}
int mid=(l+r)/;
if (x<=mid) query_min(rt<<,l,mid,x);
else query_min(rt<<|,mid+,r,x);
return ;
}
int main()
{lol i,x,j,p;
lol k,pos;
//freopen("robot.in","r",stdin);
//freopen("robot.out","w",stdout);
n=gi();m=gi();
for (i=;i<=n;i++)
{
nowb[i]=gi();a[i]=;nowk[i]=;
}
h[]=;
for (i=;i<=m;i++)
{
q[i].t=gi();
h[i+]=q[i].t;
scanf("%s",ch);
if (ch[]=='c')
{
q[i].id=gi();q[i].k=gi();
q[i].kind=;
}
}
size=unique(h+,h+m+)-h-;
for (i=;i<=m;i++)
if (q[i].kind)
{
int x=q[i].id;
int lst=lower_bound(h+,h+size+,a[x])-h;
int now=lower_bound(h+,h+size+,q[i].t)-h;
update_max(,,size,lst,now,(Line){nowk[x],nowb[x],});
update_min(,,size,lst,now,(Line){nowk[x],nowb[x],});
//cout<<lst<<' '<<now<<' '<<nowk[x]<<' '<<nowb[x]<<endl;
nowb[x]=nowb[x]+q[i].t*(nowk[x]-q[i].k);
nowk[x]=q[i].k;a[x]=q[i].t;
}
for (i=;i<=n;i++)
{
int lst=lower_bound(h+,h+size+,a[i])-h;
update_max(,,size,lst,size,(Line){nowk[i],nowb[i],});
update_min(,,size,lst,size,(Line){nowk[i],nowb[i],});
//cout<<lst<<' '<<size<<' '<<nowk[i]<<' '<<nowb[i]<<endl;
}
for (i=;i<=m;i++)
if (q[i].kind==)
{
ansmax=;
ansmin=;
int t=lower_bound(h+,h+size+,q[i].t)-h;
query_max(,,size,t);
query_min(,,size,t);
printf("%lld\n",max(ansmax,-ansmin));
}
}
BZOJ 3938 Robot的更多相关文章
- BZOJ.3938.Robot(李超线段树)
BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...
- bzoj3938 Robot
3938: Robot Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 336 Solved: 112[Submit][Status][Discuss ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 1408: [Noi2002]Robot
1408: [Noi2002]Robot Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 Solved: 344[Submit][Status][ ...
- 【BZOJ】【3205】【APIO2013】机器人robot
斯坦纳树 好神啊……Orz zyf && PoPoQQQ 为啥跟斯坦纳树扯上关系了?我想是因为每个点(robot)都沿着树边汇到根的时候就全部合起来了吧= =这个好像和裸的斯坦纳树不太 ...
- bzoj千题计划220:bzoj3938: Robot
http://www.lydsy.com/JudgeOnline/problem.php?id=3938 以时间为x轴,以距离为y轴,那么每个机器人的行走路径就是一条折线 把折线分段加入线段树里,然后 ...
- bzoj 1408 [Noi2002]Robot(欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1408 [题意] 求m的所有约数中,满足可以分解成(奇数个不同素数/偶数个不同素数/其 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
随机推荐
- Alpha冲刺博客合集
Alpha冲刺序列: Alpha冲刺Day1:Alpha No.1 Alpha冲刺Day2:Alpha No.2 Alpha冲刺Day3:Alpha No.3 Alpha冲刺Day4:Alpha No ...
- 学号:201621123032 《Java程序设计》第12周学习总结
1:本周学习总结 1.1:以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2:面向系统综合设计-图书馆管理系统或购物车 2.1: 简述如何使用流与文件改造你的系统.文件中数据的格式如何? ...
- JVM启动参数
JVM参数的含义 实例见实例分析 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,J ...
- JavaScript简写技巧总结
在日常工作中,JavaScript一些常用的简写技巧,将直接影响到我们的开发效率,现将常用技巧整理如下: 1. 空(null, undefined)验证 当我们创建了一个新的变量,我们通常会去 ...
- nyoj n-1位数
n-1位数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的 ...
- Mongodb 3 查询优化(慢查询Profiling)
开启慢查询Profiling Profiling级别说明 0:关闭,不收集任何数据. 1:收集慢查询数据,默认是100毫秒. 2:收集所有数据 1.通过修改配置文件开启Profiling 修改启动mo ...
- 你考虑清楚了吗就决定用 Bootstrap ?
近年来,在前端项目中, Bootstrap 已经成为了一个非常受欢迎的工具. Bootstrap 的确有很多优点,然而,如果你的团队中恰好有一个专职的前端工程师.那我推荐你们不要使用 Bootstra ...
- MySQL命令(逐步更新ing)
启动mysql 开启: /etc/init.d/mysqld start关闭: /etc/init.d/mysqld stop重启: /etc/init.d/mysqld restart 查看m ...
- 【已解决】React中配置Sass引入.scss文件无效
React中配置Sass引入.scss文件无效 在react中使用sass时,引入.scss文件失效 尝试很多方法没法解决,最终找到解决方法,希望能帮助正在坑里挣扎的筒子~ 在node_modules ...
- Java8新特性第2章(接口默认方法)
在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现.默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化. ...