标题: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 每做完一个操作后,整个序列的和。

  这题暴力肯定可以得一部分的,区间大小最差的情况就是每次都给L=1,R=N,这时暴力肯定不行的,会写线段树的话,可以看出这题也就是单点更新以及总区间查询。而它没说数据范围,但就算是1e18的话,取log对于每个位置的数来说,它最多也就更新个60次左右,所以我们可以加个标记,代表这个区间内还有没有位置需要更新,然后再线段树维护,时间复杂度就是60*nlog(n)这样。

 #include<cstdio>
#include<cmath>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define M(x) ((T[x].l+T[x].r)>>1)
typedef long long ll;
const int N=;
struct Tree{
bool flag;
int l,r;
ll sum;
}T[N<<];
ll a[N];
void built(int id,int l,int r)
{
T[id].l=l;
T[id].r=r;
T[id].sum=;
T[id].flag=false;
if(l==r)
{
T[id].sum=a[l];
T[id].flag=(a[l]>2ll);
return ;
}
built(L(id),l,M(id));
built(R(id),M(id)+,r);
T[id].flag=T[L(id)].flag|T[R(id)].flag;
T[id].sum=T[L(id)].sum+T[R(id)].sum;
}
void modify(int id,int l,int r)
{
if(!T[id].flag)
return ;
if(T[id].l==T[id].r)
{
T[id].sum=(ll)floor(log2(1.0*T[id].sum)+1.0);
T[id].flag=(T[id].sum>2ll);
return ;
}
if(l<=M(id))
modify(L(id),l,r);
if(r>M(id))
modify(R(id),l,r);
T[id].flag=T[L(id)].flag|T[R(id)].flag;
T[id].sum=T[L(id)].sum+T[R(id)].sum;
}
int main()
{
int n,m,l,r;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
built(,,n);
while(m--)
{
scanf("%d%d",&l,&r);
modify(,l,r);
printf("%lld\n",T[].sum);
}
return ;
}

线段树下线段果

  不懂线段树的话,知道stl的map的话,还有种map的写法,思路一样,当某个位置的值<=2时就把它从map删去。

 #include<cstdio>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
map<int,ll> mmp;
map<int,ll>::iterator b,e,temp;
int main()
{
int n,m,l,r;
ll sum=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%lld",&mmp[i]);
sum+=mmp[i];
}
while(m--)
{
scanf("%d%d",&l,&r);
b=mmp.lower_bound(l);
e=mmp.upper_bound(r);
while(b!=e)
{
temp=b;
b++;
sum-=temp->second;
temp->second=(ll)floor(1.0*log2(temp->second)+1.0);
sum+=temp->second;
if(temp->second<=)
mmp.erase(temp);
}
printf("%lld\n",sum);
}
return ;
}

STLwd

蓝桥 log大侠的更多相关文章

  1. 蓝桥杯Log大侠(线段树单点区间更新)

    标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...

  2. 2014年第五届蓝桥杯国赛 Log大侠(区间合并+Java递归效率分析)

    1678: Log大侠 java 时间限制: 2 Sec  内存限制: 256 MB提交: 20  解决: 1 题目描述     atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称L ...

  3. java实现第五届蓝桥杯LOG大侠

    LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力- 变换的规则是: 对其某个 ...

  4. C语言 · LOG大侠

    标题:LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...

  5. 历届试题_log大侠

    标题:Log大侠     atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠.     一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... ...

  6. 2014年第五届蓝桥杯C/C++程序设计本科B组决赛

    1.年龄巧合(枚举) 2.出栈次序(推公式/Catalan数) 3.信号匹配(kmp) 4.生物芯片(完全平方数) 5.Log大侠(线段树) 6.殖民地 1.年龄巧合 小明和他的表弟一起去看电影,有人 ...

  7. 算法笔记_205:第五届蓝桥杯软件类决赛真题(C语言B组)

    目录 1 年龄巧合 2 出栈次序 3 信号匹配 4 生物芯片 5 Log大侠 6 殖民地   前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 年龄巧合 小明和他的表弟一起去看电影,有人问他们的年龄. ...

  8. 第五届蓝桥杯C++B组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.年龄巧合 小明和他的表弟一起去看电影,有人问他们的年龄.小明说:今年是我们的幸运年啊.我出生年份的四位数字加起来刚好是我的年龄.表弟的 ...

  9. 几道STL题目(FJUT - OJ STL训练1)

    这个OJ一直在做,一些专题题目都很好,从易至难,阶梯上升,很适合像我这样的蒟蒻 =7= 这篇是关于其中一个专题训练的题解思路及代码   http://120.78.128.11/Contest.jsp ...

随机推荐

  1. css 颜色自动变化 炫彩

    .layui-icon-login-qq:hover{ color:rgb(0, 156, 255); transition: 0.5s; animation:change 10s linear 0s ...

  2. Codeforces 1097D. Makoto and a Blackboard

    传送门 首先考虑如果 $n$ 只有一个质因数的情况,即 $n=p^t$ 那么显然可以 $dp$ ,设 $f[i][j]$ 表示第 $i$ 步,当前剩下 $p^j$ 的概率 那么转移很简单: $f[i] ...

  3. Java 同一个类的不同实例对象竟然可以相互访问各自的private成员

    如题,在看String源码的某个函数时,发现了这个操作是被允许的,而且可以直接改变private字段(不是final按理是可以改变),这与之前的理解有点相背. 接下来试图整理下Google来的结论: ...

  4. 复习二叉数 pat l2-006 数的遍历

    L2-006. 树的遍历   给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点 ...

  5. hdu 1068 最大子序列和变形,,,

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...

  6. eureka解析hostname为localhost问题 (转)

    https://blog.csdn.net/liufei198613/article/details/79583686 公司的springcloud已经上线运行,但是最近测试环境老是会出现一个诡异的问 ...

  7. ASE19团队项目alpha阶段model组 scrum6 记录

    本次会议于11月8日,19时整在微软北京西二号楼sky garden召开,持续15分钟. 与会人员:Kun Yan, Lei Chai, Linfeng Qi, Xueqing Wu, Yutong ...

  8. java oop 基础

    1.如果将一个类打包,使用该类的时候,必须使用该类的全名,java编译器才能找到. 2.也可以使用import 导入这个包. 3.可以不需要import语句 直接使用 java.lang包中的类. 4 ...

  9. uni-app中nvue (weex) 注意事项

    前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...

  10. 打印n对括号的全部有效组合(左右括号正确匹配)Java实现

    一.问题导出 今天在做算法题目的时候遇到了一道左右括号匹配的问题,问题如下: 二.问题思考 (1)这种要列出全部可能性的题目很容易想到由小到大去发现规律,用递归或者暴力搜索. 首先1的情况,一个括号只 ...