题意:

有三种操作:

1 x y: 表示给x位置加上y

2 x y:查询【x,y】的区间和

3 x y:将 【x,y】 区间上的数变为最接近的 Fibonacci。

思路: 1 操作按正常单调更新,区间求和的操作。

2 操作按正常区间求和。

    3  如果是之前该区间未被 第三类操作操作过,则更新到底,如果之前已经被第三类操作操作过则直接返回。 这里要打一个标记,要注意 在第1类操作单点加时要把标记往下更新。

#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include <iostream>
#define LL long long
#define debug(x) printf(#x"= %d\n",x);
#define N 100050
#define L(x) (x<<1)
#define R(x) (x<<1|1)
using namespace std;
int flag[N*];
LL sum[N*];
LL f[];
int fcnt;
void build(int l,int r,int i)
{
flag[i]=sum[i]=;
if(l!=r)
{
int mid=(l+r)>>;
build(l,mid,L(i));
build(mid+,r,R(i));
}
}
void pushdown(int i)
{
if(flag[i])
{
flag[L(i)]=flag[R(i)]=;
flag[i]=;
}
}
void pushup(int i)
{
sum[i]=sum[L(i)]+sum[R(i)];
}
void add(int l,int r,int p,int va,int i)
{
if(l==r)
{
sum[i]+=va;
flag[i]=;
return;
}
pushdown(i);
int mid=(l+r)>>;
if(p<=mid)add(l,mid,p,va,L(i));
else add(mid+,r,p,va,R(i));
pushup(i);
}
void update(int l,int r,int pl,int pr,int i)
{
if(l==r)
{
if(sum[i]<=){
sum[i]=;
}
else
{
int l=,r=fcnt;
while(r-l>)
{
int mid=(l+r>>);
if(f[mid]>=sum[i])r=mid;
else l=mid;
}
if(sum[i]-f[l]<=f[r]-sum[i])
sum[i]=f[l];
else
sum[i]=f[r];
}
//printf("::%d %I64d\n",l,sum[i]);
return;
}
if(flag[i])
return;
if(l>=pl&&r<=pr)
flag[i]=;
int mid=(l+r)>>;
if(pl<=mid)
update(l,mid,pl,pr,L(i));
if(pr>mid)
update(mid+,r,pl,pr,R(i));
pushup(i);
}
LL query(int l,int r,int pl,int pr,int i)
{
if(l>=pl&&r<=pr)
{
return sum[i];
}
int mid=(l+r)>>;
LL tmp=;
if(pl<=mid)tmp+=query(l,mid,pl,pr,L(i));
if(pr>mid)tmp+=query(mid+,r,pl,pr,R(i));
return tmp;
}
int main() {
f[]=f[]=;
for(int i=;;++i)
{
f[i]=f[i-]+f[i-];
if(f[i]>1e17)
{
fcnt=i;
break;
}
}
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int x,y,z;
build(,n,);
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
if(x==)
{
add(,n,y,z,);
}
else if(x==)
{
printf("%I64d\n",query(,n,y,z,));
}
else
{
update(,n,y,z,);
}
}
}
return ;
}

HDU 4893 Wow! Such Sequence!(2014 Multi-University Training Contest 3)的更多相关文章

  1. HDU 4893 Wow! Such Sequence! (线段树)

    Wow! Such Sequence! 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4893 Description Recently, Doge ...

  2. hdu 4893 Wow! Such Sequence!(线段树)

    题目链接:hdu 4983 Wow! Such Sequence! 题目大意:就是三种操作 1 k d, 改动k的为值添加d 2 l r, 查询l到r的区间和 3 l r. 间l到r区间上的所以数变成 ...

  3. HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)

    磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add  把d加到第k个数上去2 ...

  4. 线段树 + 区间更新: HDU 4893 Wow! Such Sequence!

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. hdu 4893 Wow! Such Sequence!

    http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d - "add" 2 l r - "query sum ...

  6. HDU 4893 Wow! Such Sequence! (树状数组)

    题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数, 并且是最小的那个. 析 ...

  7. hdu 5003 模拟水题 (2014鞍山网赛G题)

    你的一系列得分 先降序排列 再按0.95^(i-1)*ai 这个公式计算你的每一个得分 最后求和 Sample Input12530 478Sample Output984.1000000000 # ...

  8. HDU 4675 GCD of Sequence(莫比乌斯反演 + 打表注意事项)题解

    题意: 给出\(M\)和\(a数组\),询问每一个\(d\in[1,M]\),有多少组数组满足:正好修改\(k\)个\(a\)数组里的数使得和原来不同,并且要\(\leq M\),并且\(gcd(a_ ...

  9. HDU 5783 Divide the Sequence(数列划分)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

随机推荐

  1. HDU5829 NTT

    以下这份代码并没有过.但感觉没有问题.不是蜜汁WA就是蜜汁T. #include <cstdio> #include <iostream> #include <cstri ...

  2. 学习日记day8:移动端页面流程优化

    一:切图 1:切那些(移动端能不用图片就不用图片:logo单独切因为要带链接) 2:普通切(快捷键:复制到新图层  选中 复制 新建 粘贴 保存)  3:类似切 (选中多个图层  矩形框多选  选择工 ...

  3. 新建我的 第一个maven项目

    maven是管理项目的,myeclipse是编写代码的.第一次写项目都要配置好多东西,很麻烦,now 来看看怎样新建一个maven项目. 百度经验:jingyan.baidu.com 工具/原料   ...

  4. (三)uboot源码分析

    一.九鼎官方uboot和三星原版uboot对比(1)以九鼎官方的uboot为蓝本来学习的,以三星官方的这份为对照.(2)不同版本的uboot或者同一版本不同人移植的uboot,可能目录结构和文件内容都 ...

  5. (二)miller指导查看主控板寄存器操作

    Welcome to Command Shell!Username:admin Password:***** ROS>en ROS# ROS# ROS# ROS# ROS#^ada ROS(ad ...

  6. 【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  7. Spring Bean配置默认为单实例 pring Bean生命周期

    Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...

  8. unsigned char 无符号整形 减法运算

    对于一个字节来说: unsigned char :     0  ~  255              0000 0000  ~ 1111 1111 char :-128  ~  127       ...

  9. 转:Eric Lippert:阅读代码真的很难

    转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...

  10. 自定义view获取宽高

    View在构造函数初始化并未布局处理,此时宽高均为0,待所有控件初始化完毕后,由上级容器对内部各控件进行布局,此时控件才会具有位置与大小属性,可以通过以下方法获取:1.在ondraw()函数中获取,2 ...