蓝桥杯Log大侠(线段树单点区间更新)
标题: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
- #include"cstdio"
- #include"cmath"
- #include"algorithm"
- using namespace std;
- const int MAXN=;
- typedef long long LL;
- struct node{
- int l,r;
- LL sum;
- }segTree[MAXN*];
- int cnt;
- void build(int rt,int l,int r)
- {
- segTree[rt].l=l;
- segTree[rt].r=r;
- if(l==r)
- {
- scanf("%lld",&segTree[rt].sum);
- if(segTree[rt].sum==)
- {
- cnt++;//统计数值1的个数 ,方便优化程序
- segTree[rt].sum++;//将所有1均变为2,防止1干扰程序优化
- }
- return ;
- }
- int mid=(l+r)>>;
- build(rt<<,l,mid);
- build((rt<<)|,mid+,r);
- segTree[rt].sum=segTree[rt<<].sum+segTree[(rt<<)|].sum;
- }
- void update(int rt,int l,int r)
- {
- if(segTree[rt].sum==*(segTree[rt].r-segTree[rt].l+)) return ;//优化:不超过4轮,不小于2的整数在均变为2
- if(segTree[rt].l==segTree[rt].r)
- {
- segTree[rt].sum=(LL)(log2(segTree[rt].sum*1.0)+);
- return ;
- }
- int mid=(segTree[rt].l+segTree[rt].r)>>;
- if(r<=mid) update(rt<<,l,r);
- else if(mid<l) update((rt<<)|,l,r);
- else{
- update(rt<<,l,mid);
- update((rt<<)|,mid+,r);
- }
- segTree[rt].sum=segTree[rt<<].sum+segTree[(rt<<)|].sum;
- }
- int main()
- {
- int n,m;
- scanf("%d%d",&n,&m);
- build(,,n);
- while(m--)
- {
- int x,y;
- scanf("%d%d",&x,&y);
- update(,x,y);
- printf("%lld\n",segTree[].sum-cnt);
- }
- }
蓝桥杯Log大侠(线段树单点区间更新)的更多相关文章
- 2019hdu多校3 hdu4893(线段树单点 区间更新
补这题主要是因为第三个操作要维护区间,而不是点,否则会T. https://vjudge.net/problem/HDU-4893 题意:输入n.q.表示有n个数,初始化默认这n个数都为零,有q次操作 ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1698:Just a Hook(线段树,区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 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 ...
- hdu1698线段树的区间更新区间查询
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 1556 Color the ball(线段树:区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...
- zoj3686(线段树的区间更新)
对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ...
- Color the ball (线段树的区间更新问题)
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ...
随机推荐
- Android中BaseAdapter使用基础点
Android中要填充一些控件(如ListView)经常须要用到Adapter来实现,经常使用的有ArrayAdapter,SimpleAdapter, CursorAdapter,BaseAdapt ...
- uva--10714+找规律
题意: 一根长度为len的木棍上有n仅仅蚂蚁.蚂蚁们都以1cm/s的速度爬行;假设一仅仅蚂蚁爬到了木棍的端点,那么他就会掉下去;假设两仅仅蚂蚁碰到一起了,他们就会掉头往相反方向爬行.输入len和n仅仅 ...
- SRM 626 D1L1: FixedDiceGameDiv1,贝叶斯公式,dp
题目:http://community.topcoder.com/stat?c=problem_statement&pm=13239&rd=15859 用到了概率论中的贝叶斯公式,而贝 ...
- python 基础 2.4 while 循环
#/usr/bin/python #coding=utf-8 #@Time :2017/10/18 15:31 #@Auther :liuzhenchuan #@File :while 循环.py 示 ...
- 360手机助手: App上架(提交资料)注意事项
提交app资料尤其注意: .keystore和密码?由HBuilder提供公有证书: 签名证书KeyStore证书别名:hbuilder证书密码:123456keystore密码:123456 360 ...
- 【题解】[APIO2009]会议中心
[题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法 ...
- 将QQ登录接口整合到你的网站和如何修改配置
http://www.phpfensi.com/php/20140727/3998.html 摘要:QQ登录的官方SDK进行了一些修改,使其更加容易的整合到自己的网站上去... 对QQ登录的官方SDK ...
- turbolink 造成 link_to异常
link_to 点击之后不刷新不加载文件 send_file 只能在浏览器中打开,而不能下载 解决方法:注释gem turbolink,application.js 中移除turbolink
- Codeforces 854B Maxim Buys an Apartment:贪心
题目链接:http://codeforces.com/contest/854/problem/B 题意: 有n栋房子从1到n排成一排,有k栋房子已经被售出. 现在你要买一栋“好房子”. 一栋房子是“好 ...
- struts2 自定义类型转化 第三弹
1.Struts2的类型转化,对于8种原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转化器实现自动转化:但对于自定义的对象类型来说,就需要我们自己指定类型转化的的方 ...