http://www.lydsy.com/JudgeOnline/problem.php?id=3938 (题目链接)

题意

  给出数轴上$n$个点,有$m$个操作,在时间$t$让一个点以一定的速度移动,或者询问时间$t$时距离原点最远的点。

Solution

  超哥线段树。时间当做横坐标,负半轴的情况斜率和截距乘上$-1$再做一遍。

  话说我为什么要离散化=  =

细节

  LL

代码

// bzoj3938
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf (1ll<<60)
#define eps 1e-8
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std; const int maxn=1000010;
LL ans[maxn],a[maxn];
int n,m,cnt,tot,last[maxn],tim[maxn],q[maxn];
char ch[100]; struct seg {
LL k,b,l,r;
LL ch(LL x) {return k*x+b;}
}v[maxn];
struct node {int cov;seg mx;}tr[maxn<<2];
double X(seg a,seg b) {
return a.k==b.k ? inf : 1.0*(a.b-b.b)/(b.k-a.k);
} void insert(int k,int l,int r,int s,int t,seg g) {
int mid=(l+r)>>1;
if (l==s && r==t) {
if (!tr[k].cov) tr[k].mx=g,tr[k].cov=1;
else {
seg a1=tr[k].mx,a2=g;double x=X(a1,a2);
if (a1.ch(tim[l])<a2.ch(tim[l]) || (fabs(a1.ch(tim[l])-a2.ch(tim[l]))<eps && a1.k<a2.k)) swap(a1,a2);
if (x<=tim[l] || x>=tim[r]) {tr[k].mx=a1;return;}
if (x<=tim[mid]) tr[k].mx=a2,insert(k<<1,l,mid,s,mid,a1);
else tr[k].mx=a1,insert(k<<1|1,mid+1,r,mid+1,t,a2);
}
return;
}
if (t<=mid) insert(k<<1,l,mid,s,t,g);
else if (s>mid) insert(k<<1|1,mid+1,r,s,t,g);
else insert(k<<1,l,mid,s,mid,g),insert(k<<1|1,mid+1,r,mid+1,t,g);
}
LL query(int k,int l,int r,int x) {
if (l==r) return tr[k].cov ? tr[k].mx.ch(x) : 0;
int mid=(l+r)>>1;LL t=0;
if (x<=tim[mid]) t=query(k<<1,l,mid,x);
else t=query(k<<1|1,mid+1,r,x);
return tr[k].cov ? max(t,tr[k].mx.ch(x)) : t;
}
void clear(int k,int l,int r) {
tr[k].cov=0;
if (l==r) return;
int mid=(l+r)>>1;
clear(k<<1,l,mid);
clear(k<<1|1,mid+1,r);
} int main() {
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
for (int i=1;i<=n;i++) v[++cnt]=(seg){0,a[i],0,-1},last[i]=cnt;
for (int x,i=1;i<=m;i++) {
scanf("%d",&tim[i]);
scanf("%s",ch);
if (ch[0]=='c') {
scanf("%d%lld",&x,&v[++cnt].k);
v[last[x]].r=v[cnt].l=tim[i];v[cnt].r=-1;
a[x]=v[last[x]].k*tim[i]+v[last[x]].b;
v[cnt].b=a[x]-v[cnt].k*tim[i];
last[x]=cnt;
}
if (ch[0]=='q') q[++tot]=tim[i];
}
m=unique(tim,tim+1+m)-tim-1;
for (int i=1;i<=cnt;i++) {
if (v[i].r==-1) v[i].r=tim[m];
int l=lower_bound(tim,tim+1+m,v[i].l)-tim;
int r=lower_bound(tim,tim+1+m,v[i].r)-tim;
insert(1,0,m,l,r,v[i]);
}
for (int i=1;i<=tot;i++)
ans[i]=query(1,0,m,q[i]);
clear(1,0,m);
for (int i=1;i<=cnt;i++) {
int l=lower_bound(tim,tim+1+m,v[i].l)-tim;
int r=lower_bound(tim,tim+1+m,v[i].r)-tim;
v[i].k*=-1;v[i].b*=-1;
insert(1,0,m,l,r,v[i]);
}
for (int i=1;i<=tot;i++) ans[i]=max(ans[i],query(1,0,m,q[i]));
for (int i=1;i<=tot;i++) printf("%lld\n",ans[i]);
return 0;
}

【bzoj3938】 Robot的更多相关文章

  1. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  2. 【转】Robot Framework用法总结

    今天总结下Robot Framework最基本的用法,一来呢,希望自己以后看到这篇总结,很快能回忆起如何使用Robot Framework.二来呢,以初学者的姿态总结Robot Framework,希 ...

  3. 【转】Robot Framework作者建议如何选择自动化测试框架

    原文:http://www.infoq.com/cn/news/2012/06/robot-author-suggest-autotest 软件自动化测试,作为手工测试的替代,越来越受到关注.Pekk ...

  4. 【转】robot framework + python实现http接口自动化测试框架

    前言 下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了 ...

  5. 自动化测试===【转】Robot Framework作者建议如何选择自动化测试框架

    原文:http://www.infoq.com/cn/news/2012/06/robot-author-suggest-autotest 软件自动化测试,作为手工测试的替代,越来越受到关注.Pekk ...

  6. 【自动化测试】robot framwork的一点小发现

    我们在搭建完robotframwork框架并开始打开火狐浏览器的时候,总会碰到打不开浏览器的问题.这次,分享一个常见的小问题. 这个问题呢,是因为火狐的版本更新频繁,导致selenium的版本跟不上导 ...

  7. 【CF645D】 Robot Rapping Results Report(拓扑排序,二分)

    题意:有一张N点M边的有向图,求最小的K使根据前K条边就能够确定图是否有唯一的拓扑序, 若没有唯一拓扑序输出-1 思路:二分答案再拓扑排序,以入度为0的节点作为新的一层,若某一层的节点个数<&g ...

  8. 【POJ1573】Robot Motion

    题目传送门 本题知识点:模拟 本题的题意也很简单. 给出一个矩阵,矩阵里面有着东南西北(上下左右)的指示,当机器人走到上面时则会按照指示前进.机器人每次都从最上面一行的某一列进入. 需要判断的是机器人 ...

  9. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

随机推荐

  1. [Oracle]构筑TDE 环境的例子

    构筑TDE 环境的例子: 测试环境:12.1.0.2 $ cd $ORACLE_HOME/network/admin$ vim sqlnet.ora $ pwd/u01/app/oracle/prod ...

  2. 插件GsonFormat快速生成JSon实体类

    IntelliJ IDEA 个人觉得是目前最好最强最智能的Java IDE,默认已经集成了几乎所有主流的开发工具和框架. 1.常用工具支持Java日常开发需要接触到很多常用的工具,为了便于使用,很多工 ...

  3. CentOS7下单机部署RabbltMQ环境的操作记录

    一.RabbitMQ简单介绍在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务 ...

  4. linux下向一个文件中的某行插入数据的做法

    sed -i 'ni\x' test.file        表示向test.file文件里的第n行的前面添加x内容sed -i 'na\x' test.file       表示向test.file ...

  5. Cobbler自动化批量安装Linux操作系统 - 运维总结

    一.Cobbler简述 Cobbler是一个自动化和简化系统安装的工具,通过使用网络引导来控制和启动安装.Cobbler的特性包括存储库镜像.Kickstart模板和连接电源管理系统.Cobbler通 ...

  6. curator 分布式锁InterProcessMutex

    写这篇文章的目的主要是为了记录下自己在zookeeper 锁上踩过的坑,以及踩坑之后自己的一点认识; 从zk分布式锁原理说起,原理很简单,大家也应该都知道,简单的说就是zookeeper实现分布式锁是 ...

  7. Python 可调用对象

    除了用户定义的函数,调用运算符(即 ())还可以应用到其他对象上.如果想判断对象能否调用,可以使用内置的 callable() 函数.Python 数据模型文档列出了 7 种可调用对象.(1)用户定义 ...

  8. Pair Work:电梯调度算法的实现和测试 by 12061171 and 12061168

    结队成员简介: 成员:牛强,学号12061171:刘文乔,学号120611683 我们之所以结对编程以完成所给课设要求,是因为我们互相了解彼此,能够更好更快地完成.下图是我们合作编程时的留影: 牛强是 ...

  9. Flask之WSGI:Werkzeug

    WSGI 一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的Body发送给浏览器: 浏览器收到HTTP响应,从HT ...

  10. Individual Project - Word_frequency

    0x00 预先准备和时间规划 1.因为要用到visual studio 2013,准备学习C#,预计一天时间能基本使用. 3.了解需求并设计基本数据结构与大致流程 20min 2.根据提议实现simp ...