[Bzoj5254][Fjwc2018]红绿灯(线段树)
5254: [Fjwc2018]红绿灯
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 31 Solved: 24
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
Source
AC代码:
# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
typedef long long LL;
const int N = 5e4 + ;
int block[N],tot,n,m,Q;LL G,C,P,d[N],b[N],s[N],f[N],w;
int mi[N << ];
void push(int x){mi[x] = min(mi[x << ],mi[x << | ]);}
void updata(int L,int l,int r,int rt,int v)
{
if(l == r){mi[rt] = v;return;}
int mid = l + r >> ;
if(L <= mid)updata(L,l,mid,rt << ,v);
else updata(L,mid + ,r,rt << | ,v);
push(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
if(L > R)return n + ;
if(L <= l && r <= R)return mi[rt];
int mid = l + r >> ;
if(L > mid)return Query(L,R,mid + ,r,rt << | );
if(R <= mid)return Query(L,R,l,mid,rt << );
return min(Query(L,R,l,mid,rt << ),Query(L,R,mid + ,r,rt << | ));
}
int query(LL w)
{
w = (w % P + P) % P;
LL L,R;int lc,rc,k;
L = (G + w) % P,R = (P - + w) % P;
lc = lower_bound(b + ,b + m + ,L) - b;
rc = upper_bound(b + ,b + m + ,R) - b - ;
if(L <= R)k = Query(lc,rc,,m,);
else k = min(Query(lc,m,,m,),Query(,rc,,m,));
return k;
}
void add(int x,int y,LL bac)
{
f[x] = f[y] + s[y] - s[x];
if(y != n + )f[x] = f[x] + P - (s[y] - s[x] + bac) % P;
}
int main()
{
scanf("%d %lld %lld",&n,&G,&C);P = G + C;
for(int i = ;i <= n + ;i++)scanf("%lld",&d[i]);
for(int i = ;i <= n + ;i++)s[i] = s[i - ] + d[i],b[i] = s[i] % P;
b[n + ] = ;b[n + ] = P;
sort(b + ,b + n + );
m = unique(b + ,b + n + ) - b - ;
for(int i = ;i <= (m << );i++)mi[i] = n + ;
int k;
for(int i = n;i >= ;i--)
{
k = query(s[i] % P);
add(i,k,);
updata(lower_bound(b + ,b + m + ,s[i] % P) - b,,m,,i);
}
scanf("%d",&Q);
while(Q--)
{
scanf("%lld",&w);
k = query(-w);
add(,k,w);
printf("%lld\n",f[] + w);
}
}
[Bzoj5254][Fjwc2018]红绿灯(线段树)的更多相关文章
- BZOJ 5254 [Fjwc2018]红绿灯 (线段树)
题目大意:一个wly从家走到学校要经过n个红绿灯,绿灯持续时间是$g$,红灯是$r$,所有红绿灯同时变红变绿,交通规则和现实中一样,不能抢红灯,两个红绿灯之间道路的长度是$di$,一共$Q$个询问,求 ...
- BZOJ5254 FJWC2018红绿灯(线段树)
注意到一旦在某个路口被红灯逼停,剩下要走的时间是固定的.容易想到预处理出在每个路口被逼停后到达终点的最短时间,这样对于每个询问求出其最早在哪个路口停下就可以了.对于预处理,从下一个要停的路口倒推即可. ...
- BZOJ5254 : [Fjwc2018]红绿灯
显然所有询问都要经过至少$\sum d$,只需要考虑除了$\sum d$之外的等待红灯的时间. 将所有询问的时间模$g+r$,并按时间用set维护. 那么对于每个红灯,在set中可以找出$1$到$2$ ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
随机推荐
- NULL Pointer Dereference(转)
0x00 漏洞代码 null_dereference.c: #include <linux/init.h> #include <linux/module.h> #include ...
- jdk环境变量配置(参考自《疯狂java讲义》)
做个记录,免得每次配环境都要百度 环境变量的配置 path环境变量配置的作用:程序的执行需要使用外部指令javac, 但是javac指令仅仅能在JDK安装目录下的bin目录下使用,因此程序只能写入bi ...
- LeetCode 字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", num ...
- 全排列问题(DFS)
题目描述: 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列 ...
- 【Python学习之二】装饰器
装饰器 首先,给出装饰器的框架: def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return ...
- 一段式fsm
//1-paragraph method to decribe FSM //Describe state transition, state output, state input condition ...
- 避免使用aireplay-ng指令时出现AP通道不对的方法
本方法搜集网络:具体使用为在调试网卡为监听模式,使用airodump-ng指令扫描wifi后,需要先执行"airmon-ng stop wlan0"指令,然后再进行一系列抓包等操作 ...
- centos 7.3安装教程
进入安装初始化界面 等待检查完就可以进入安装了,不想等待的按ESC退出,没关系的 语言这里我们推荐使用英文: 然后点击Continue继续 选择-系统SYSTEM-安装位置INSTALLTION DE ...
- opencv中的各种滤波设计
这篇文章写得太好了 ,感觉自己实在没有办法去补充这方面的知识点 我打算把高斯滤波和双边滤波还好好补充下 这篇文章转载自一个美丽的才女:小魏 连接地址:http://blog.csdn.net/xia ...
- RHEL6.5上升级OpenSSH7.4p1
由于升级OpenSSH涉及到安全性问题,为保险起见,在升级前最好安装telnet服务作为备用方案,然后在升级成功后再停止telnet即可. 一.OpenSSH升级相关源码包下载地址 zlib htt ...