传送门

线段树入门题。

给你一个序列:支持区间修改成自己的约数个数,区间求和。


实际上跟区间开方一个道理。

2的约数个数为2,1的约数个数为1,因此只要区间的最大值小于3就不用修改否则就暴力修改。

因此要做的就是预处理一个数的约数个数,这个可以nlnnnln_nnlnn​预处理。

代码:

  1. #include<bits/stdc++.h>
  2. #define lc (p<<1)
  3. #define rc (p<<1|1)
  4. #define mid (T[p].l+T[p].r>>1)
  5. #define ri register int
  6. using namespace std;
  7. inline int read(){
  8. int ans=0;
  9. char ch=getchar();
  10. while(!isdigit(ch))ch=getchar();
  11. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(+ch^48),ch=getchar();
  12. return ans;
  13. }
  14. typedef long long ll;
  15. const int N=3e5+5,M=1e6+6;
  16. int n,m,a[N],num[M],tot=0;
  17. struct Node{ll sum;int mx,l,r;}T[N<<2];
  18. inline void init(){for(ri i=1;i<=1000000;++i)for(ri j=i;j<=1000000;j+=i)++num[j];}
  19. inline void pushup(int p){T[p].sum=T[lc].sum+T[rc].sum,T[p].mx=max(T[lc].mx,T[rc].mx);}
  20. inline void build(int p,int l,int r){
  21. T[p].l=l,T[p].r=r;
  22. if(l==r){T[p].sum=T[p].mx=a[l];return;}
  23. build(lc,l,mid),build(rc,mid+1,r),pushup(p);
  24. }
  25. inline void update(int p,int ql,int qr){
  26. if(T[p].mx<3)return;
  27. if(ql<=T[p].l&&T[p].r<=qr){
  28. if(T[p].l==T[p].r){T[p].sum=T[p].mx=num[T[p].mx];return;}
  29. update(lc,ql,qr),update(rc,ql,qr),pushup(p);
  30. return;
  31. }
  32. if(qr<=mid)update(lc,ql,qr);
  33. else if(ql>mid)update(rc,ql,qr);
  34. else update(lc,ql,mid),update(rc,mid+1,qr);
  35. pushup(p);
  36. }
  37. inline ll query(int p,int ql,int qr){
  38. if(ql<=T[p].l&&T[p].r<=qr)return T[p].sum;
  39. if(qr<=mid)return query(lc,ql,qr);
  40. if(ql>mid)return query(rc,ql,qr);
  41. return query(lc,ql,mid)+query(rc,mid+1,qr);
  42. }
  43. int main(){
  44. n=read(),m=read(),init();
  45. for(ri i=1;i<=n;++i)a[i]=read();
  46. build(1,1,n);
  47. while(m--){
  48. int op=read(),l=read(),r=read();
  49. if(op==1)update(1,l,r);
  50. else cout<<query(1,l,r)<<'\n';
  51. }
  52. return 0;
  53. }

2018.12.15 codeforces 920F. SUM and REPLACE(线段树)的更多相关文章

  1. Codeforces 920F - SUM and REPLACE

    920F - SUM and REPLACE 思路1: 线段树(982 ms) 每个点最多更新6次 代码: #include<bits/stdc++.h> using namespace ...

  2. CodeForces - 920F SUM and REPLACE (线段树)

    题意:给N个数M次操作,(1<=N,M<=3e5, 1<=ai<=1e6),1是使[L,R]中的每个元素变成其因子的个数之和:2是求[L,R]区间之和 分析:看上去就很线段树的 ...

  3. Codeforces 920F. SUM and REPLACE / bzoj 3211 花神游历各国

    题目大意: 一个数列 支持两种操作 1 把区间内的数变成他们自己的约数个数 2 求区间和 思路: 可以想到每个数最终都会变成2或1 然后我们可以线段树 修改的时候记录一下每段有没有全被修改成1或2 是 ...

  4. 【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

    题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i) ...

  5. Codeforces 85D Sum of Medians(线段树)

    题目链接:Codeforces 85D - Sum of Medians 题目大意:N个操作,add x:向集合中加入x:del x:删除集合中的x:sum:将集合排序后,将集合中全部下标i % 5 ...

  6. Codeforces 920F - SUM and REPLACE 【线段树】

    <题目链接> 题目大意: 给你一个序列,有两个操作,一个是求区间 l - r 的和,另一个是对区间l-r的元素修改值,x=d(x),d(x)为x的因子个数. 解题分析: 因为可能有多次修改 ...

  7. CF920F SUM and REPLACE 线段树

    给你一个数组a_i​,D(x)为x的约数个数 两种操作: 1.将[l,r]的a_i​替换为D(a_i) 2.输出∑​a_i ( l <= i <= r ) 当区间最大值<=2时,就不 ...

  8. Tencent Cloud Developers Conference(2018.12.15)

    时间:2018.12.15地点:北京朝阳悠唐皇冠假日酒店

  9. codeforces 1217E E. Sum Queries? (线段树

    codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...

随机推荐

  1. f5健康检查

    1.1)一般pool的健康检查 Pool member 2)检查member的多个端口,若有任意一个端口down,则切换到另一member Pool的健康检查不填,pool member的健康检查填多 ...

  2. bbs项目富文本编辑器实现上传文件到media目录

    media目录是在project的settings中设置的,static目录是django自己使用的静态文件的上传目录,media目录是用户自定义上传文件的目录 # Django用户上传的文件都放在m ...

  3. checkbox控制text是否可以填写和radio是否可选

    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  4. SQL Merge 语法 单表查询

    --项目中需要用到Merg语法,于是去网上查了资料,发现竟然都是多表查询,问题是我只有一张表,于是我纳闷了,后来我灵机一动,就搞定了!--表名:t_login(登录表)--字段:f_userName( ...

  5. wampserver 403forbidden问题

    1.c:\wamp\alias\phpmyadmin.conf 打开之后又这么一段源码; <Directory "D:\wamp\apps\phpmyadmin3.4.10.1/&qu ...

  6. POI依据类型设置导出格式

    //设置Bigdecimal数据导出时以数值形式输出 CellStyle decimalStyle = workbook.createCellStyle(); DataFormat decimalDf ...

  7. SSH异常“Failed to start OpenSSH Server daemon”

    [root@bogon yum]# systemctl status sshd.service● sshd.service - OpenSSH server daemon   Loaded: load ...

  8. /usr/local/ 和 /opt

    /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/.用户自己编译的软件默认会安装到这个目录下. /opt:用户级的程序目录,可以理解为D:/Software,opt有 ...

  9. 运行PL-SVO(单目)

    代码:https://github.com/rubengooj/pl-svo 1.Prerequisites and dependencies (1)SVO 安装SVO,with ROS:https: ...

  10. 【APT】SqlServer游标使用

    use [ElephantCredit] go begin transaction tran_bank; print '**脚本开始执行!'; declare @tran_error int , @n ...