大意是有n段路,每一段路有个值a,通过每一端路需要1s,如果通过这一段路时刻t为a的倍数,则需要等待1s再走,也就是需要2s通过。

比较头疼的就是相邻两个数之间会因为数字不同制约,一开始想a的范围是2-6,处理这几个数字互相之间的关系,还是想岔了。

正解应当是开60个线段树,因为2-6的LCM是60,也就是所有数字模2-6,结果的循环节长度为60。所以如果从i到j,开始时刻如果为0,则答案一定与开始时刻为60相同。

第x个线段树某个节点范围如果是i和j,维护的便是开始时刻模60为x的情况下,从i到j+1需要的时间。

写的时候按照这个处理节点信息合并与查询即可。

 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <set> using namespace std; const int N=1e5+;
const int M=;
int v[N<<][M]; void up(int rt) {
for (int i=;i<M;i++) {
v[rt][i]=v[rt<<][i]+v[rt<<|][(i+v[rt<<][i])%M];
}
}
void build(int l,int r,int rt) {
if (l==r) {
int a;
scanf("%d",&a);
for (int i=;i<M;i++)
v[rt][i]=+(i%a==);
return;
}
int m=(l+r)>>;
build(l,m,rt<<);
build(m+,r,rt<<|);
up(rt);
}
void update(int p,int a,int l,int r,int rt) {
if (l==r) {
for (int i=;i<M;i++)
v[rt][i]=+(i%a==);
return;
}
int m=(l+r)>>;
if (p<=m)
update(p,a,l,m,rt<<);
else
update(p,a,m+,r,rt<<|);
up(rt);
}
int ask(int L,int R,int l,int r,int rt,int p) {
if (L<=l&&r<=R) {
return v[rt][p];
}
int ret=;
int m=(l+r)>>;
if (L<=m) ret+=ask(L,R,l,m,rt<<,p);
if (R>m) ret+=ask(L,R,m+,r,rt<<|,(p+ret)%M);
return ret;
}
int main () {
int n;
scanf("%d",&n);
build(,n,);
int Q;
scanf("%d",&Q);
while (Q--) {
char s[];
int x,y;
scanf("%s %d %d",s,&x,&y);
if (s[]=='C')
update(x,y,,n,);
else
printf("%d\n",ask(x,y-,,n,,));
}
return ;
}

CF #284 div1 D. Traffic Jams in the Land 线段树的更多相关文章

  1. Codeforces 498D Traffic Jams in the Land | 线段树

    题目大意: 给坐标轴1~n的点,每个点有一个权值,从一个点走到下一个点需要1s,如果当前时间是权值的倍数就要多花1s 给出q组操作,C表示单点修改权值,A表示询问0时刻x出发到y的时间 题解:因为权值 ...

  2. CF498D:Traffic Jams in the Land——题解

    https://vjudge.net/problem/CodeForces-498D http://codeforces.com/problemset/problem/498/D 题面描述: 一些国家 ...

  3. CF498D Traffic Jams in the Land

    嘟嘟嘟 题面:有n条公路一次连接着n + 1个城市,每一条公路有一个堵塞时刻a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟:否则需要1分钟. 现给出n条公路的a[i],以及m次操作 ...

  4. [codeforces] 498D Traffic Jams in th Land

    原题 简单的线段树问题. 对于题目中,a[i]的范围是2~6,我们仔细思考可以得出第0秒和第60秒是一样的(因为2~6的最小公倍数是60,),然后我们可以建一个线段树,里面记录0~59秒时刻开始通过这 ...

  5. CF 316E3 Summer Homework(斐波那契矩阵+线段树)

    题目链接:http://codeforces.com/problemset/problem/316/E3 题意:一个数列A三种操作:(1)1 x y将x位置的数字修改为y:(2)2 x y求[x,y] ...

  6. CF 150E Freezing with Style [长链剖分,线段树]

    \(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找 ...

  7. CF#462 div1 D:A Creative Cutout

    CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...

  8. [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】

    题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...

  9. BZOJ 1018: [SHOI2008]堵塞的交通traffic [线段树 区间信息]

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3064  Solved: 1027[Submi ...

随机推荐

  1. 红黑树 C++实现

    #ifndef __RED_BLACK_TREE_H__ #define __RED_BLACK_TREE_H__ namespace lxf { template <typename Key, ...

  2. jQuery获取Select选择的Text和Value

     jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...});   //为S ...

  3. 3856: Monster

    3856: Monster Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 351  Solved: 161[Submit][Status][Discuss ...

  4. 如何在appconfig中配置服务的ip

    开发了一个WindowsService消息服务器,刚开始一直都是在代码中把IP地址写死,所以每次只要是更换了新的IP地址后,都需要重新编译项目.所以考虑把ip配置到config文件中, 这样做的好处是 ...

  5. android学习——环境的搭建

    1.安装JDK(java开发工具箱) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html(根据自己需要下载) ...

  6. unittest单元测试框架实现参数化

    当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...

  7. ps-修复

    1-    复制图层 2-    工具栏——套索——多变套索工具——上侧工具栏——羽化(15像素) 选区,防止其他区域被修改        羽化,让修改的边缘柔和化 3-    选项区——编辑——填充 ...

  8. 前端学PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  9. JS 数组及函数

    数组    定义        Array(1,3.14,"aa")            给数据        Array(5)            给长度        [1 ...

  10. Meta http-equiv属性详解

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...