题意:

有三种操作:

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. oracle linux 下卸载

    1. 关闭数据库 shutdown immeidate 2. 停止 Listener lsnrctl stop 3. 停止http服务(可选) service httpd stop 4. 用su或者重 ...

  2. apiCloud结合layer实现动态数据弹出层

    css /** 我的二维码 begin **/ .aui-list .wechat-media { width: 3rem; } .wechat-middle { padding: 1.3em 3.2 ...

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

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

  4. Mybatis3+Spring4+SpringMVC4 整合

    首先在整合这个框架的时候,想想其一般的步骤是怎样的,先有个步骤之后,不至于在后面的搞混了,这样在整合的时候也比较清晰些. 然后我们就细细的一步一步来整合. 1  创建一个Web项目. 2  导入Myb ...

  5. Java 默认/缺省 server 还是 client 模式

    不多说,复制官方文档,适用于 Java 5 6 7 Architecture OS Default client VM if server-class, server VM; otherwise, c ...

  6. idea+git

    http://www.cnblogs.com/java-maowei/p/5950930.html

  7. COM组件(ATL篇)

    目录 第1章创建进程内组件    1 1.1 目标    1 1.2 创建项目    3 1.2.1 VC++6.0    3 1.2.2 VC++2010    5 1.3 增加COM类    6 ...

  8. linux中无 conio.h的解决办法

    conio.h不是C标准库中的头文件,在ISO和POSIX标准中均没有定义.conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函 ...

  9. AC自动机 & Fail树 专题练习

    Fail树就是AC自动机建出来的Fail指针构成的树. [bzoj3172][xsy1713]单词 题意 给定一些单词,求每个单词在所有单词里面的出现次数. 分析 构建Fail树,记录每个单词最后一个 ...

  10. laravel实现第三方登录

    https://github.com/laravel/socialite 这是官方的第三方登录包,支持很多国外的第三方登录 https://github.com/overtrue/socialite ...