题意:

有三种操作:

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. 09 高效的PL/SQL程序设计

    程序包 Package 断开了依赖链 实验依赖关系: <1> 首先不使用包 -- 创建表 CREATE table t (x int); -- 创建视图 create view v as ...

  2. 车辆管理系统之搭建框架 添加必要的数据 安装svn(二)

    JAVA EE第一阶段项目——车辆管理系统.MyEclipse + MySQL +powerDesinger +tomcat +svn. 今天组长把项目的分工安排好了!这个周末两天的作业就是我的车主信 ...

  3. Java多线程同步的方法

    一 synchronized关键字 1.synchronized实现原理: ---基于对象监视器(锁) java中所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数.如果一个对象被解锁,其计数 ...

  4. 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!

    http://bbs.wuyou.net/forum.php?mod=viewthread&tid=363198&extra=抛弃vboot不格盘用grub4dos+firadisk安 ...

  5. 基于websocket的jsp与java进行交互

    环境:jdk.18   tomcat-7.0.70 把tomcat中的 两个jir包复制到 注意:最后部署的时候要删除掉这两个jar包 tomcate中已经有了 ebSocket对象的创建和服务器连接 ...

  6. GoF--命令设计模式

    定义 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化.分离变化与不变的因素. 角色 Command ...

  7. HTML5 game engines

    The following are few examples of game engines implemented with HTML5 and JavaScript: Construct 2: O ...

  8. 10款实用Android UI 开发框架

    1. ActionBarSherlock ActionBarSherlock是一个独立的Android设计库,可以让Android 2.x的系统也能使用ActionBar.此外,ActionBarSh ...

  9. WLAN历史概述-01

    无线网络介绍 无线网络的初步应用,可以追朔到第二次世界大战期间,当时美国陆军采用无线电信号做资料的传输.他们研发出了一套无线电传输科技,并且采用相当高强度的加密技术,得到美军和盟军的广泛使用.他们也许 ...

  10. 【转】HTML, CSS和Javascript调试入门

    转 http://www.cnblogs.com/PurpleTide/archive/2011/11/25/2262269.html HTML, CSS和Javascript调试入门 本文介绍一些入 ...