HDU 4893 Wow! Such Sequence!(2014 Multi-University Training Contest 3)
题意:
有三种操作:
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)的更多相关文章
- HDU 4893 Wow! Such Sequence! (线段树)
Wow! Such Sequence! 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4893 Description Recently, Doge ...
- 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区间上的所以数变成 ...
- HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add 把d加到第k个数上去2 ...
- 线段树 + 区间更新: HDU 4893 Wow! Such Sequence!
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- hdu 4893 Wow! Such Sequence!
http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d - "add" 2 l r - "query sum ...
- HDU 4893 Wow! Such Sequence! (树状数组)
题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数, 并且是最小的那个. 析 ...
- hdu 5003 模拟水题 (2014鞍山网赛G题)
你的一系列得分 先降序排列 再按0.95^(i-1)*ai 这个公式计算你的每一个得分 最后求和 Sample Input12530 478Sample Output984.1000000000 # ...
- HDU 4675 GCD of Sequence(莫比乌斯反演 + 打表注意事项)题解
题意: 给出\(M\)和\(a数组\),询问每一个\(d\in[1,M]\),有多少组数组满足:正好修改\(k\)个\(a\)数组里的数使得和原来不同,并且要\(\leq M\),并且\(gcd(a_ ...
- HDU 5783 Divide the Sequence(数列划分)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
随机推荐
- php用curl调用接口方法,get和post两种方式
首先是客户端执行方法ApiModel.php: <?php /** * 模拟post进行url请求 * @param string $url * @param array $post_data ...
- 了解OpenStack
OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack支持几乎所有类型的云环境,项目目标 ...
- Java中List Set Map 是否有序等总结
1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文 ...
- apiCloud授权绑定第三方账号,微信、QQ、微博。
1.检测软件是否安装 2.授权获取code 3.获取token,openid等 4.获取头像昵称 var wx,qq,weibo; var loginParam={}; apiready = func ...
- Android SQLite数据库
SQLite数据库 SQLiteDatabase //管理操作数据库 管理 openDatabase //打开 openOrCreateDatabase //打开或创建 操作 ...
- mac homebrew PHP
启动PHP p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Andale Mono"; color: #29f914; ...
- python 打包与部署
环境:win10.eclipse-jee-mars.python2.7 打包在linux上进行安装测试 1.1 打包 项目目录结构如下: 打包对象:utils.reg 在P1项目的顶级目录,也就是ut ...
- linux下在jar包中找类是否存在
find /usr/lib -name "*.jar" -exec grep -Hsli 类名 {} \;
- HashMap详解
HashMap:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html ConcurrentHashMap:http://ww ...
- Yum常用命令及Yum中文手册
转自:http://blog.csdn.net/huangbiao86/article/details/6646471 Yum配置文件位于/etc/yum.conf和/etc/yum.repos.d/ ...