标题:Log大侠

atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠。

一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力...

变换的规则是: 对其某个子序列的每个整数变为: [log_2 (x) + 1]  其中 [] 表示向下取整,就是对每个数字求以2为底的对数,然后取下整。     例如对序列 3 4 2 操作一次后,这个序列会变成 2 3 2。         drd需要知道,每次这样操作后,序列的和是多少。

【输入格式】 第一行两个正整数 n m 。 第二行 n 个数,表示整数序列,都是正数。 接下来 m 行,每行两个数 L R 表示 atm 这次操作的是区间 [L, R],数列序号从1开始。

【输出格式】 输出 m 行,依次表示 atm 每做完一个操作后,整个序列的和。

例如,

输入:

3 3

5 6 4

1 2

2 3

1 3

程序应该输出:

10

8

6

【数据范围】 对于 30% 的数据, n, m <= 10^3 对于 100% 的数据, n, m <= 10^5

资源约定: 峰值内存消耗 < 256M CPU消耗  < 1000ms

  1. #include"cstdio"
  2. #include"cmath"
  3. #include"algorithm"
  4. using namespace std;
  5. const int MAXN=;
  6. typedef long long LL;
  7. struct node{
  8. int l,r;
  9. LL sum;
  10. }segTree[MAXN*];
  11. int cnt;
  12. void build(int rt,int l,int r)
  13. {
  14. segTree[rt].l=l;
  15. segTree[rt].r=r;
  16. if(l==r)
  17. {
  18. scanf("%lld",&segTree[rt].sum);
  19. if(segTree[rt].sum==)
  20. {
  21. cnt++;//统计数值1的个数 ,方便优化程序
  22. segTree[rt].sum++;//将所有1均变为2,防止1干扰程序优化
  23. }
  24. return ;
  25. }
  26. int mid=(l+r)>>;
  27. build(rt<<,l,mid);
  28. build((rt<<)|,mid+,r);
  29. segTree[rt].sum=segTree[rt<<].sum+segTree[(rt<<)|].sum;
  30. }
  31.  
  32. void update(int rt,int l,int r)
  33. {
  34. if(segTree[rt].sum==*(segTree[rt].r-segTree[rt].l+)) return ;//优化:不超过4轮,不小于2的整数在均变为2
  35.  
  36. if(segTree[rt].l==segTree[rt].r)
  37. {
  38. segTree[rt].sum=(LL)(log2(segTree[rt].sum*1.0)+);
  39. return ;
  40. }
  41.  
  42. int mid=(segTree[rt].l+segTree[rt].r)>>;
  43.  
  44. if(r<=mid) update(rt<<,l,r);
  45. else if(mid<l) update((rt<<)|,l,r);
  46. else{
  47. update(rt<<,l,mid);
  48. update((rt<<)|,mid+,r);
  49. }
  50. segTree[rt].sum=segTree[rt<<].sum+segTree[(rt<<)|].sum;
  51. }
  52.  
  53. int main()
  54. {
  55. int n,m;
  56. scanf("%d%d",&n,&m);
  57. build(,,n);
  58. while(m--)
  59. {
  60. int x,y;
  61. scanf("%d%d",&x,&y);
  62. update(,x,y);
  63. printf("%lld\n",segTree[].sum-cnt);
  64. }
  65. }

蓝桥杯Log大侠(线段树单点区间更新)的更多相关文章

  1. 2019hdu多校3 hdu4893(线段树单点 区间更新

    补这题主要是因为第三个操作要维护区间,而不是点,否则会T. https://vjudge.net/problem/HDU-4893 题意:输入n.q.表示有n个数,初始化默认这n个数都为零,有q次操作 ...

  2. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. hdu 1698:Just a Hook(线段树,区间更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. UVA 12436-Rip Van Winkle's Code(线段树的区间更新)

    题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...

  5. hdu1698线段树的区间更新区间查询

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  6. HDU 1556 Color the ball(线段树:区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...

  7. zoj3686(线段树的区间更新)

    对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a ...

  8. Color the ball (线段树的区间更新问题)

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...

  9. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

随机推荐

  1. Android中BaseAdapter使用基础点

    Android中要填充一些控件(如ListView)经常须要用到Adapter来实现,经常使用的有ArrayAdapter,SimpleAdapter, CursorAdapter,BaseAdapt ...

  2. uva--10714+找规律

    题意: 一根长度为len的木棍上有n仅仅蚂蚁.蚂蚁们都以1cm/s的速度爬行;假设一仅仅蚂蚁爬到了木棍的端点,那么他就会掉下去;假设两仅仅蚂蚁碰到一起了,他们就会掉头往相反方向爬行.输入len和n仅仅 ...

  3. SRM 626 D1L1: FixedDiceGameDiv1,贝叶斯公式,dp

    题目:http://community.topcoder.com/stat?c=problem_statement&pm=13239&rd=15859 用到了概率论中的贝叶斯公式,而贝 ...

  4. python 基础 2.4 while 循环

    #/usr/bin/python #coding=utf-8 #@Time :2017/10/18 15:31 #@Auther :liuzhenchuan #@File :while 循环.py 示 ...

  5. 360手机助手: App上架(提交资料)注意事项

    提交app资料尤其注意: .keystore和密码?由HBuilder提供公有证书: 签名证书KeyStore证书别名:hbuilder证书密码:123456keystore密码:123456 360 ...

  6. 【题解】[APIO2009]会议中心

    [题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法 ...

  7. 将QQ登录接口整合到你的网站和如何修改配置

    http://www.phpfensi.com/php/20140727/3998.html 摘要:QQ登录的官方SDK进行了一些修改,使其更加容易的整合到自己的网站上去... 对QQ登录的官方SDK ...

  8. turbolink 造成 link_to异常

    link_to  点击之后不刷新不加载文件 send_file 只能在浏览器中打开,而不能下载 解决方法:注释gem turbolink,application.js 中移除turbolink

  9. Codeforces 854B Maxim Buys an Apartment:贪心

    题目链接:http://codeforces.com/contest/854/problem/B 题意: 有n栋房子从1到n排成一排,有k栋房子已经被售出. 现在你要买一栋“好房子”. 一栋房子是“好 ...

  10. struts2 自定义类型转化 第三弹

    1.Struts2的类型转化,对于8种原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转化器实现自动转化:但对于自定义的对象类型来说,就需要我们自己指定类型转化的的方 ...