正题

luogu
CF498D


题目大意

给n个1-6的数,让你进行以下操作:

  1. 修改其中一个数
  2. 从第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)相关推荐

  1. Traffic Jams in the Land(线段树好题)

    Traffic Jams in the Land CodeForces - 498D Some country consists of (n + 1) cities, located along a ...

  2. CF498D Traffic Jams in the Land

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

  3. BZOJ1018 | SHOI2008-堵塞的交通traffic——线段树维护区间连通性+细节

    [题目描述] BZOJ1018 | SHOI2008-堵塞的交通traffic 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列 ...

  4. HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)

    题目链接:点击查看 题目大意:给出一个由n个点和n条边组成的图,每条边都有权值,题目保证图是连通的,然后给出m个询问,每次询问分为两种形式: 0 x y:将第x条边的权值修改为y 1 x y:查询x- ...

  5. BZOJ[1018][SHOI2008]堵塞的交通traffic 线段树

    传送门ber~ 哇这个线段树好神啊!! 用线段树维护图连通性,每个节点开个二维数组 ai,j a i , j a_{i,j}表示这个区间最左面的第 i i i行能不能走到最右面的第j" ro ...

  6. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  7. Bzoj1018[SHOI2008]堵塞的交通traffic(线段树)

    这题需要维护连通性,看到有连接删除,很容易直接就想LCT了.然而这题点数20w操作10w,LCT卡常估计过不去.看到这个东西只有两行,考虑能否用魔改后的线性数据结构去维护.我想到了线段树. 考虑如果两 ...

  8. [CQOI 2006]线段树之简单题

    Description 有一个n个元素的数组,每个元素初始均为0.有m条指令,要么让其中一段连续序列数字反转--0变1,1变0(操作1),要么询问某个元素的值(操作2).例如当n=20时,10条指令如 ...

  9. YbtOJ#662-交通运输【线段树合并,树状数组】

    正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出nnn个点的一棵有根树,对于每个xxx求,删除点xxx后修改某个点的父节点(修 ...

最新文章

  1. 近期笔试小结(附数据库工程师面试准备)
  2. 秒杀应用的MySQL数据库优化
  3. 这个项目团队能少了谁?
  4. vs编译慢原因和解决方法
  5. 测试基础理论知识(二)
  6. springboot创建项目2 开发环境的搭建
  7. docker更换国内镜像源
  8. ParameterizedType应用,利用java反射获取参数化类型的class实例
  9. 关于Oracle数据库导入数据显示中文乱码
  10. 华为p40为何没有搭载鸿蒙系统?
  11. Oracle union all和order by一起使用
  12. 100行python代码实现细胞自动机(康威生命游戏)
  13. 蓝牙Socket通讯
  14. vs调试nuget包_NuGet包调试源码的方法
  15. 用十条命令在一分钟内检查Linux服务器性能[转]
  16. 手机总是耗电太快,怎么办?
  17. 【Linux】2. Linux实操命令
  18. 学习日常英语(每天更新10+—)
  19. 使用STM32CubeMX 快速生成 USB HID 工程 - STM32F107VCT6
  20. ansible 学习

热门文章

  1. 后端返回number类型数据_Javascript基础教程之数据类型 (数值 Number)
  2. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
  3. android loading封装_我们经常用的Loading动画居然还有这种姿势
  4. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
  5. 7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!
  6. Java当中 IO(File) 操作 之 递归打印子孙级目录和文件名称
  7. [Java基础]注解概念
  8. LOOPS HDU - 3853(概率dp,期望)
  9. php常用linux命令httpd,Linux常用的100个命令
  10. kruskal 重构树(讲解 + 例题)