题目大意:

给坐标轴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 ;
}

最新文章

  1. Mac下Jenkins+SVN+Xcode构建持续
  2. USACO翻译:USACO 2013 NOV Silver三题
  3. Activity 横竖屏切换
  4. 端口限制情况下php+xdebug环境配置
  5. C# 面试的“区别”
  6. 网页音乐突破金币(RMB)下载限制
  7. Linux C编程一站式学习
  8. VB6 GDI+ 入门教程[8] Bitmap魔法(1):创建
  9. js如何将纯数字字符串转换为long型
  10. 多线程程序设计学习(10)Future pattern
  11. o] TortoiseGit错误 - Could not get all refs. libgit2 returned: corrupted loose reference file
  12. SuperSocket源码解析之会话生命周期
  13. 文本变语音引擎 ekho
  14. [codeforces631E]Product Sum
  15. 为 MariaDB 配置远程访问权限
  16. Django-CKedtior图片找不到的问题
  17. Java方法的静态绑定与动态绑定讲解(向上转型的运行机制详解)
  18. FlinkCEP - Complex event processing for Flink
  19. 十分钟搞定pandas内容
  20. SQL server的高可用

热门文章

  1. (排班表二)后台动态绘制Grid表格
  2. Python类与对象--基础
  3. 【CSS】多行溢出显示省略号
  4. MySQL 如何生成月份表
  5. QToolBox学习笔记
  6. openwrt(二) 配置openwrt及编译
  7. POJ:3273-Monthly Expense
  8. POJ:3126-Prime Path
  9. 27-Middleware管道介绍
  10. 笔记-scrapy-setting