Codeforces 498D Traffic Jams in the Land | 线段树
题目大意:
给坐标轴1~n的点,每个点有一个权值,从一个点走到下一个点需要1s,如果当前时间是权值的倍数就要多花1s
给出q组操作,C表示单点修改权值,A表示询问0时刻x出发到y的时间
题解:因为权值只有2,3,4,5,6,所以60是一个周期,我们维护一颗线段树,维护0到59时刻出发从l到r+1用的时间
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100010
using namespace std;
struct node
{
int l,r,tim[];
}t[*N];
int n,q,a[N],x,y;
char s[N];
void pushup(int p)
{
for (int i=;i<;i++)
t[p].tim[i]=t[*p].tim[i]+t[*p+].tim[(t[*p].tim[i]+i)%];
}
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if (l!=r)
{
int mid=l+r>>;
build(*p,l,mid);
build(*p+,mid+,r);
pushup(p);
}
else
for (int i=;i<;i++)
t[p].tim[i]=+!(i%a[l]);
}
void modify(int p,int l,int k)
{
int ll=t[p].l,rr=t[p].r,mid=ll+rr>>;
if (ll==l && ll==rr)
{
for (int i=;i<;i++)
t[p].tim[i]=+!(i%k);
return;
}
if (l<=mid) modify(*p,l,k);
else modify(*p+,l,k);
pushup(p);
}
int query(int p,int x,int y,int ti)
{
int ll=t[p].l,rr=t[p].r,mid=ll+rr>>;
if (x==ll && y==rr)
return t[p].tim[ti%];
if (y<=mid)
return query(*p,x,y,ti);
if (x>mid) return query(*p+,x,y,ti);
int tmp=query(*p,x,mid,ti);
return tmp+query(*p+,mid+,y,(ti+tmp)%);
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",a+i);
a[n+]=;
build(,,n+);
scanf("%d",&q);
while (q--)
{
scanf("%s",s);
scanf("%d%d",&x,&y);
if (s[]=='C')
modify(,x,y);
else
printf("%d\n",query(,x,y-,));
}
return ;
}
Codeforces 498D Traffic Jams in the Land | 线段树的更多相关文章
- [codeforces] 498D Traffic Jams in th Land
原题 简单的线段树问题. 对于题目中,a[i]的范围是2~6,我们仔细思考可以得出第0秒和第60秒是一样的(因为2~6的最小公倍数是60,),然后我们可以建一个线段树,里面记录0~59秒时刻开始通过这 ...
- CF #284 div1 D. Traffic Jams in the Land 线段树
大意是有n段路,每一段路有个值a,通过每一端路需要1s,如果通过这一段路时刻t为a的倍数,则需要等待1s再走,也就是需要2s通过. 比较头疼的就是相邻两个数之间会因为数字不同制约,一开始想a的范围是2 ...
- CF498D:Traffic Jams in the Land——题解
https://vjudge.net/problem/CodeForces-498D http://codeforces.com/problemset/problem/498/D 题面描述: 一些国家 ...
- CF498D Traffic Jams in the Land
嘟嘟嘟 题面:有n条公路一次连接着n + 1个城市,每一条公路有一个堵塞时刻a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟:否则需要1分钟. 现给出n条公路的a[i],以及m次操作 ...
- Codeforces VK CUP 2015 D. Closest Equals(线段树+扫描线)
题目链接:http://codeforces.com/contest/522/problem/D 题目大意: 给你一个长度为n的序列,然后有m次查询,每次查询输入一个区间[li,lj],对于每一个查 ...
- Codeforces Codeforces Round #316 (Div. 2) C. Replacement 线段树
C. ReplacementTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/problem ...
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- Codeforces 558E A Simple Task (计数排序&&线段树优化)
题目链接:http://codeforces.com/contest/558/problem/E E. A Simple Task time limit per test5 seconds memor ...
- Codeforces 629D Babaei and Birthday Cakes DP+线段树
题目:http://codeforces.com/contest/629/problem/D 题意:有n个蛋糕要叠起来,能叠起来的条件是蛋糕的下标比前面的大并且体积也比前面的大,问能叠成的最大体积 思 ...
随机推荐
- mpvue重构小程序之坑点1
对于最近刚做的项目,想着用框架重新架构一遍,方便以后拓展,毕竟现在拓展方向非常大. 目前主要碰到两个略坑的问题: 1: 关于用户授权信息的按钮,原生是以下方式,使用bindgetuserinfo事件 ...
- Python线程间事件通知
Python事件机制 事件机制:这是线程间最简单的通信机制:一个线程发送事件,其他线程等待事件事件机制使用一个内部的标志,使用set方法进行使能为True,使用clear清除为falsewait方法将 ...
- 一张思维导图带你梳理HashMap相关知识
HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...
- linux 安装 zookeeper
第一步 下载 zookeeper: http://archive.apache.org/dist/zookeeper/ 第二步 解压: tar -xzvf zookeeper-3.4.5.tar.gz ...
- IntelliJ IDEA 2016 汉化说明:
把汉化包解压后,然后将resources_cn.jar 复制到 .lib 目录,重新打开就是中文.
- php中==和===的含义及区别
===比较两个变量的值和类型:==比较两个变量的值,不比较数据类型. 比如 $a = '123'; $b = 123; $a === $b为假: $a == $b为真: 有些情况下不能使用==,可以使 ...
- PHP开发环境搭建一:PHP集成环境XAMPP 的安装与配置
1. XMAPP简介 XAMPP(Apache+MySQL/MariaDB+PHP+Perl)开头的X代表X-OS,代表可以在任何常见操作系统下使用,包括Windows.Mac.Linux,开源平台. ...
- tomcat 无论如何都无法创建新的Servers
1.退出eclipse 2.到[工程目录下 workspace ]/.metadata/.plugins/org.eclipse.core.runtime 3.把org.eclipse.wst.ser ...
- Pandas 索引和切片
Series和Datafram索引的原理一样,我们以Dataframe的索引为主来学习 列索引:df['列名'] (Series不存在列索引) 行索引:df.loc[].df.iloc[] 选择列 / ...
- 使用postMan测试insert或者update接口
URL : http://localhost:8099/orderVoice/updateAgentLogin?access_token=7f10e803-f886-47df-b3dc-9ed307d ...