标题: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大侠(线段树单点区间更新)的更多相关文章

  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. Mongodb亿级数据量的性能测试

    进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:   (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 ...

  2. WPF converter(包含传递复杂参数)

    单值转换器 将单一值转换为特定类型的值,以日期转换为例如下: 1.定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert. 1 public class DateC ...

  3. jquery 滚动效果插件

    1.css <style> .fl { float: left; } .slider0 img { display: block; width:100px; padding: 2px; } ...

  4. Python学习笔记18:标准库之多进程(multiprocessing包)

    我们能够使用subprocess包来创建子进程.但这个包有两个非常大的局限性: 1) 我们总是让subprocess执行外部的程序,而不是执行一个Python脚本内部编写的函数. 2) 进程间仅仅通过 ...

  5. MongoDB的对象的创建

    package com.voice.db; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mon ...

  6. Swift 学习笔记 (类和结构体)

    类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...

  7. [证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器

    第一部分:概述 .. 第二部分:环境准备 1 操作系统 CentOS 6.x 2 安装openssl yum install -y openssl 3 安装jdk 从官网下载JDK http://ww ...

  8. org.apache.catalina.Lifecycle

    org.apache.catalina.Lifecycle start() *  ----------------------------- *  |                         ...

  9. 关于button的自动刷新

    今天在开发中遇到了ajax传数据到后台,处理结果正常,返回的resultMap是一个Map<String,Object>类型,但是返回时显示'Fail to load response d ...

  10. Java for LeetCode 108 Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...