2014多校3 Wow! Such Sequence!段树
主题链接:http://acm.hdu.edu.cn/showproblem.php?
pid=4893
这个问题还真是纠结啊……好久不写线段树的题了。由于这几天学伸展树。然后认为线段树小case了。没想到栽在这题上了。尼玛……
自己把自己给搞晕了……想复杂了。都不懂得预处理一下,唉……还得怒刷几十道啊!
!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <cstdlib>
#include <queue>
#include <stack>
#include <vector>
#include <ctype.h>
#include <algorithm>
#include <string>
#include <set>
#define PI acos(-1.0)
#define MM 500015
#define INF 0x7fffffff
#define mem(a,b) memset(a,b,sizeof(a))
#define eps 1e-8
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
typedef long long ll;
typedef unsigned long long ULL;
using namespace std;
long long Fib[91],sum[MM],fib[MM];
int val[MM];
int n;
void init()
{
Fib[0]=1;
Fib[1]=1;
for(int i=2; i<92; i++)
Fib[i]=Fib[i-1]+Fib[i-2];
}
void pushUp(int i)
{
sum[i]=sum[i<<1]+sum[i<<1|1];
fib[i]=fib[i<<1]+fib[i<<1|1];
}
void pushDown(int i)
{
if(val[i])
{
val[i<<1]=1,val[i<<1|1]=1;
sum[i<<1]=fib[i<<1],sum[i<<1|1]=fib[i<<1|1];
val[i]=0;
}
}
void update(int i,int l,int r,int L,int v)
{
if(l==r&&l==L)
{
sum[i]+=v;
if(sum[i]<=1) {fib[i]=1;return;}
int ii=lower_bound(Fib,Fib+92,sum[i])-Fib;
if(Fib[ii]-sum[i]>=sum[i]-Fib[ii-1])
fib[i]=Fib[ii-1];
else fib[i]=Fib[ii];
return ;
}
int mid=(l+r)>>1;
pushDown(i);
if(L>mid) update(rson,L,v);
else update(lson,L,v);
pushUp(i);
}
void update1(int i,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
{
sum[i]=fib[i];
val[i]=1;
return ;
}
int mid=(l+r)>>1;
pushDown(i);
if(R>mid) update1(rson,L,R);
if(L<=mid) update1(lson,L,R);
pushUp(i);
}
ll query(int i,int l,int r,int L,int R)
{
if(L<=l&&r<=R) return sum[i];
ll ans=0;
int mid=(l+r)>>1;
pushDown(i);
if(R>mid) ans+=query(rson,L,R);
if(L<=mid) ans+=query(lson,L,R);
return ans;
}
void build(int i,int l,int r)
{
if(l==r)
{
sum[i]=val[i]=0;
fib[i]=1;
return ;
}
int mid=(l+r)>>1;
build(lson);build(rson);
pushUp(i);
val[i]=0;
}
int main()
{
int m;
init();
while(~scanf("%d%d",&n,&m))
{
build(1,1,n);
while(m--)
{
int a,l,r;
scanf("%d%d%d",&a,&l,&r);
if(a==1) update(1,1,n,l,r);
else if(a==2) printf("%I64d\n",query(1,1,n,l,r));
else if(a==3) update1(1,1,n,l,r);
}
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
2014多校3 Wow! Such Sequence!段树的更多相关文章
- HDU4893:Wow! Such Sequence!(段树lazy)
Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- Wow! Such Sequence!(线段树4893)
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 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!
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- HDU 4893 Wow! Such Sequence! (线段树)
Wow! Such Sequence! 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4893 Description Recently, Doge ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
- 计蒜客 28315.Excellent Engineers-线段树(单点更新、区间最值) (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E)
先写这几道题,比赛的时候有事就只签了个到. 题目传送门 E. Excellent Engineers 传送门 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到 ...
- HDU 1394 Minimum Inversion Number (数据结构-段树)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
随机推荐
- 美化 input type=file控件
大家都知道input的type=file控件默认样式是不能修改的 可以通过一个小技巧处理下 html: <a href="javascript:;" class=" ...
- Centos6.5中 一键安装LNMP 安装Yii2.0 手工配置
1.一键安装LNMP cd /usr wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz tar zxf lnmp1.-full.tar.gz ...
- scanf一次给多个变量赋值
本节课程笔记: 一是对多个变量进行赋值,二是对非法输入的值做正确处理(处理方式了解即可,相关函数知识后期讲解),三是美化scanf代码加入输出说明. /* Name:scanf一次给多个变量赋值 Co ...
- 重拾CSS基础—开篇
由来 从事软件行业一晃也5年有余,之间参与过若干个基于web的项目,所以javascript和Html基本已经相当熟悉,最近对于web前端开发比较关注,分析后发现CSS的确是自己的弱项,于是决定再加强 ...
- Java图形化界面设计——布局管理器之CardLayout(卡片布局)
- java的控制流程
1.顺序结构顺序结构就是指按语句执行的先后顺序,或者说语句出现的先后顺序逐条执行程序语句.语句块,完全是按照程序平台的执行约定进行的,比如第一个 HelloWorld程序:public class H ...
- uva 11137 Ingenuous Cubrency(完全背包)
题目连接:11137 - Ingenuous Cubrency 题目大意:由21种规模的立方体(r 1~21),现在给出一个体积, 要求计算可以用多少种方式组成. 解题思路:完全背包, 和uva674 ...
- AngularJS Directive 学习笔记
指令 Directive 指令要点 大漠老师的教学节点 解析最简单的指令 hello: 匹配模式 restrict 解析最简单的指令 hello: template.tempmlateUrl.$tem ...
- 转帖Jmeter中的几个重要测试指标释义
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- c++ primer plus 习题答案(8)
p475.2 //头文件: class Cd{ private: char *performers; char *label; int selections; double playtime; pub ...