花神喜欢步行游历各国,顺便虐爆各地竞赛。花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家)。

每一次旅行中,花神会选择一条旅游路线,它在那一串国家中是连续的一段,这次旅行带来的开心值是这些国家的喜欢度的总和,当然花神对这些国家的喜欢程序并不是恒定的,有时会突然对某些国家产生反感,使他对这些国家的喜欢度 δ 变为 sqrt (δ)​(可能是花神虐爆了那些国家的 OI,从而感到乏味)。

现在给出花神每次的旅行路线,以及开心度的变化,请求出花神每次旅行的开心值。

输入格式

第一行是一个整数 N,表示有 N 个国家;

第二行有 N 个空格隔开的整数,表示每个国家的初始喜欢度 δi​;

第三行是一个整数 M,表示有 M 条信息要处理;

第四行到最后,每行三个整数 x,l,r,当 x=1 时询问游历国家 l 到 r 的开心值总和,也就是∑r​δi​ ,当 x=2 时国家 l 到 r 中每个国家的喜欢度δi​ 变为sqrt(δi)​​ 。

输出格式

每次 x=1 时,每行一个整数。表示这次旅行的开心度。

样例

样例输入

  1. 4
  2. 1 100 5 5
  3. 5
  4. 1 1 2
  5. 2 1 2
  6. 1 1 2
  7. 2 2 3
  8. 1 1 4

样例输出

  1. 101
  2. 11
  3. 11

数据范围与提示

对于全部数据,1≤n≤10^5,1≤m≤2×10^5,1≤l≤r≤n,0≤δi​≤10^9。

注:建议使用 sqrt 函数,且向下取整。

__________________________________________________________________________

懒惰标记为bool型,标记当前区域是否已经无需开方,也就是是否都是1或0.

bz[cur]=bz[cur<<1] && bz[cur<<1|1]

如果懒惰标记为1,则无需再做修改。

__________________________________________________________________________

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 const int maxn=1e5+10;
  4. 4 typedef long long ll;
  5. 5 ll sum[maxn<<2],a[maxn];
  6. 6 bool delt[maxn<<2];
  7. 7 ll n,m;
  8. 8 void build(ll cur,ll l,ll r)
  9. 9 {
  10. 10 if(l==r)
  11. 11 {
  12. 12 sum[cur]=a[l];
  13. 13 if(sum[cur]==0 || sum[cur]==1)delt[cur]=1;
  14. 14 return ;
  15. 15 }
  16. 16 ll mid=(l+r)>>1;
  17. 17 build(cur<<1,l,mid);
  18. 18 build(cur<<1|1,mid+1,r);
  19. 19 sum[cur]=sum[cur<<1]+sum[cur<<1|1];
  20. 20 delt[cur]=delt[cur<<1] && delt[cur<<1|1];
  21. 21 }
  22. 22 void change(ll cur,ll l,ll r,ll ql,ll qr)
  23. 23 {
  24. 24 if(delt[cur])return;
  25. 25 if(l==r)
  26. 26 {
  27. 27 sum[cur]=sqrt(sum[cur]);
  28. 28 if(sum[cur]==1 || sum[cur]==0)delt[cur]=1;
  29. 29 return ;
  30. 30 }
  31. 31 ll mid=(l+r)>>1;
  32. 32 if(ql<=mid)change(cur<<1,l,mid,ql,qr);
  33. 33 if(mid<qr)change(cur<<1|1,mid+1,r,ql,qr);
  34. 34 sum[cur]=sum[cur<<1]+sum[cur<<1|1];
  35. 35 delt[cur]=delt[cur<<1] && delt[cur<<1|1];
  36. 36 }
  37. 37 ll query(ll cur,ll l,ll r,ll ql,ll qr)
  38. 38 {
  39. 39 if(ql<=l && r<=qr)return sum[cur];
  40. 40 ll ans=0,mid=(l+r)>>1;
  41. 41 if(ql<=mid)ans+=query(cur<<1,l,mid,ql,qr);
  42. 42 if(mid<qr)ans+=query(cur<<1|1,mid+1,r,ql,qr);
  43. 43 return ans;
  44. 44 }
  45. 45 int main()
  46. 46 {
  47. 47 scanf("%lld",&n);
  48. 48 for(int i=1;i<=n;++i)scanf("%lld",a+i);
  49. 49 build(1,1,n);
  50. 50 scanf("%lld",&m);
  51. 51 for(int op,ql,qr,i=0;i<m;++i)
  52. 52 {
  53. 53 scanf("%d%d%d",&op,&ql,&qr);
  54. 54 if(op==1)printf("%lld\n",query(1,1,n,ql,qr));
  55. 55 else change(1,1,n,ql,qr);
  56. 56 }
  57. 57 return 0;
  58. 58 }

LOJ10128. 花神游历各国的更多相关文章

  1. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  2. BZOJ 3211: 花神游历各国( 线段树 )

    线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...

  3. BZOJ 3211: 花神游历各国【线段树区间开方问题】

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3514  Solved: 1306[Submit][Status][Discu ...

  4. bzoj3211花神游历各国 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4252  Solved: 1547[Submit][Status][Discu ...

  5. 【BZOJ】【3211】花神游历各国

    线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注 ...

  6. BZOJ3211: 花神游历各国(线段树)

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 5692  Solved: 2114[Submit][Status][Discu ...

  7. 【BZOJ3211】花神游历各国 并查集+树状数组

    [BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 ...

  8. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

  9. BZOJ3211花神游历各国

    BZOJ3211花神游历各国 BZOJ luogu 分块 记一个all表示该块是否全部<=1,如果all不为真就暴力修改 因为一个数被开根的次数不多,即使\(10^{12}\)只要开根6次也会变 ...

随机推荐

  1. docker 使用笔记

    docker 使用笔记 1. 与宿主机之间拷贝文件 docker cp test.html 99f952ac05e6cd879f14aa6c9d0db02aaf498634edc4f6cdc9953c ...

  2. 用anaconda的pip安装第三方python包

    启动anaconda命令窗口: 开始> 所有程序> anaconda> anaconda prompt会得到两行提示: Deactivating environment " ...

  3. [leetcode]62.UniquePaths

    /** * Created by lvhao on 2017/7/6. * A robot is located at the top-left corner of a m x n grid (mar ...

  4. java.util.Collections

    p.p1 { margin: 0; font: 11px Monaco } span.s1 { text-decoration: underline } span.s2 { color: rgba(1 ...

  5. Redis+LUA整合使用

    .前言 从本章节开始我们就开始讲解一些 Redis 的扩展应用了,之前讲的主从.哨兵和集群都相当重要,也许小公司用不到集群这么复杂的架构,但是也要了解各知识点的原理,只要了解了原理,无论什么时候是有, ...

  6. CentOS 7 最小化安装及优化

    CentOS 7 最小化安装及优化 目录 CentOS 7 最小化安装及优化 一.下载镜像文件 官方网站 国内镜像源 一.VMware 配置虚拟网络 二.VMware 新建虚拟机 三.CentOS 7 ...

  7. String StringBuffer StringBuilder之间的区别

    String:

  8. Head First 设计模式 —— 07. 适配器模式

    思考题 你能想到真实世界中,还有哪些适配器的例子? P236 HDMI 转 VGA 转换器 Type-C 转 3.5mm 线 适配器模式解析 客户使用适配器的过程: P241 客户通过目标接口调用适配 ...

  9. JVM 源码分析(二):搭建 JDK 8 源码调试环境(Windows 上使用 CLion)

    前言 一.准备源码 二.安装 "Bootstrap JDK" 三.配置编译环境 四.编译与测试 五.安装 CMake 和 GDB 五.准备远程调试 六.开始远程调试 前言 上一篇文 ...

  10. 基于nginx实现web服务器的双机热备

    1.适用场景 对于部署重要的服务,会使用两台服务器,互相备份,共同执行同一服务.当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务.双机热 ...