【线段树】Traffic Jams in the Land(CF498D)
正题
luogu
CF498D
题目大意
给n个1-6的数,让你进行以下操作:
- 修改其中一个数
- 从第x个数走到第y个数(x≤yx\leq yx≤y),到达一个点时,如果当前时间能被该数整除,那么时间+2,否则+1(初始时间为0),问走到y的时间
解题思路
因为每个数 ≤6\leq 6≤6,所以可以求出1-6的lcm为60,计算时只要知道时间对60取模的结果就可以知道是否会被整除
考虑使用线段树,每个点维护当前区间开始时时间模60的结果会使用的时间即可
时间复杂度 O(60×nlogn)O(60\times n\ log\ n)O(60×n log n)
code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100100
using namespace std;
int n,t,x,y,v[N];
char c[N];
struct node
{int a[65];
};
node merge(node a,node b)
{node c;for(int i=0;i<60;++i)c.a[i]=a.a[i]+b.a[(i+a.a[i])%60];return c;
}
struct Tree
{#define ls x*2#define rs x*2+1node s[N<<2];void push_up(int x){s[x]=merge(s[ls],s[rs]);return;}void get(int x,int y){for(int i=0;i<60;++i)s[x].a[i]=1;for(int i=0;i*y<60;++i)s[x].a[i*y]=2;return;}void build(int x,int l,int r){if(l==r){get(x,v[l]);return;}int mid=l+r>>1;build(ls,l,mid);build(rs,mid+1,r);push_up(x);return;}void change(int x,int l,int r,int y,int z){if(l==r){get(x,z);return;}int mid=l+r>>1;if(y<=mid)change(ls,l,mid,y,z);else change(rs,mid+1,r,y,z);push_up(x);return;}node ask(int x,int L,int R,int l,int r){if(L==l&&R==r)return s[x];int mid=L+R>>1;if(r<=mid)return ask(ls,L,mid,l,r);else if(l>mid)return ask(rs,mid+1,R,l,r);else return merge(ask(ls,L,mid,l,mid),ask(rs,mid+1,R,mid+1,r));}
}T;
int main()
{scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&v[i]);T.build(1,1,n);scanf("%d",&t);while(t--){scanf("%s%d%d",c,&x,&y);if(c[0]=='C')T.change(1,1,n,x,y);else printf("%d\n",T.ask(1,1,n,x,y-1).a[0]);}return 0;
}
【线段树】Traffic Jams in the Land(CF498D)相关推荐
- Traffic Jams in the Land(线段树好题)
Traffic Jams in the Land CodeForces - 498D Some country consists of (n + 1) cities, located along a ...
- CF498D Traffic Jams in the Land
嘟嘟嘟 题面:有n条公路一次连接着n + 1个城市,每一条公路有一个堵塞时刻a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟:否则需要1分钟. 现给出n条公路的a[i],以及m次操作 ...
- BZOJ1018 | SHOI2008-堵塞的交通traffic——线段树维护区间连通性+细节
[题目描述] BZOJ1018 | SHOI2008-堵塞的交通traffic 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列 ...
- HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
题目链接:点击查看 题目大意:给出一个由n个点和n条边组成的图,每条边都有权值,题目保证图是连通的,然后给出m个询问,每次询问分为两种形式: 0 x y:将第x条边的权值修改为y 1 x y:查询x- ...
- BZOJ[1018][SHOI2008]堵塞的交通traffic 线段树
传送门ber~ 哇这个线段树好神啊!! 用线段树维护图连通性,每个节点开个二维数组 ai,j a i , j a_{i,j}表示这个区间最左面的第 i i i行能不能走到最右面的第j" ro ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)
传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...
- Bzoj1018[SHOI2008]堵塞的交通traffic(线段树)
这题需要维护连通性,看到有连接删除,很容易直接就想LCT了.然而这题点数20w操作10w,LCT卡常估计过不去.看到这个东西只有两行,考虑能否用魔改后的线性数据结构去维护.我想到了线段树. 考虑如果两 ...
- [CQOI 2006]线段树之简单题
Description 有一个n个元素的数组,每个元素初始均为0.有m条指令,要么让其中一段连续序列数字反转--0变1,1变0(操作1),要么询问某个元素的值(操作2).例如当n=20时,10条指令如 ...
- YbtOJ#662-交通运输【线段树合并,树状数组】
正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出nnn个点的一棵有根树,对于每个xxx求,删除点xxx后修改某个点的父节点(修 ...
最新文章
- 近期笔试小结(附数据库工程师面试准备)
- 秒杀应用的MySQL数据库优化
- 这个项目团队能少了谁?
- vs编译慢原因和解决方法
- 测试基础理论知识(二)
- springboot创建项目2 开发环境的搭建
- docker更换国内镜像源
- ParameterizedType应用,利用java反射获取参数化类型的class实例
- 关于Oracle数据库导入数据显示中文乱码
- 华为p40为何没有搭载鸿蒙系统?
- Oracle union all和order by一起使用
- 100行python代码实现细胞自动机(康威生命游戏)
- 蓝牙Socket通讯
- vs调试nuget包_NuGet包调试源码的方法
- 用十条命令在一分钟内检查Linux服务器性能[转]
- 手机总是耗电太快,怎么办?
- 【Linux】2. Linux实操命令
- 学习日常英语(每天更新10+—)
- 使用STM32CubeMX 快速生成 USB HID 工程 - STM32F107VCT6
- ansible 学习
热门文章
- 后端返回number类型数据_Javascript基础教程之数据类型 (数值 Number)
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
- android loading封装_我们经常用的Loading动画居然还有这种姿势
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- 7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!
- Java当中 IO(File) 操作 之 递归打印子孙级目录和文件名称
- [Java基础]注解概念
- LOOPS HDU - 3853(概率dp,期望)
- php常用linux命令httpd,Linux常用的100个命令
- kruskal 重构树(讲解 + 例题)