主题链接: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!段树的更多相关文章

  1. HDU4893:Wow! Such Sequence!(段树lazy)

    Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...

  2. 2016暑假多校联合---Rikka with Sequence (线段树)

    2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...

  3. Wow! Such Sequence!(线段树4893)

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

  4. 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区间上的所以数变成 ...

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

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

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

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

  7. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  8. 计蒜客 28315.Excellent Engineers-线段树(单点更新、区间最值) (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E)

    先写这几道题,比赛的时候有事就只签了个到. 题目传送门 E. Excellent Engineers 传送门 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到 ...

  9. HDU 1394 Minimum Inversion Number (数据结构-段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

随机推荐

  1. Mad Lib程序

    单选框  复选框  按钮  标签  文本框的应用 #coding=utf-8 __author__ = 'minmin' from Tkinter import * class Application ...

  2. win7中注册tomcat服务

    非安装版tomcat下载后,在bin文件夹会有一个startup.bat文件,运行该文件即可启动tomcat了.不过在服务器配置tomcat的话,就通常需要注册为服务. 在/bin文件下还有tomca ...

  3. Umbraco学习2------数据类型

    一.基础概念 在使用Umbraco这类CMS制作网站之前,先要搞清楚的是,和概念中网站制作的区别. 暂时忘掉所谓的ADO.NET存储.忘掉ASP.NET.忘掉多层架构什么的. 只需要关注:要显示什么. ...

  4. c#SocketIO4NetClient访问node js

    提到Node,不能错过的是WebSocket协议.它与Node之间的配合堪称完美,其理由有两条. 1.WebSocket客户端基于时间的编程模型与Node中自定义事件相差无几. 2.WebSocket ...

  5. Cocos2d-x:环境配置小节

    一.准备 须要下载下面内容. 1. vs2010 下载地址:http://download.microsoft.com/download/1/4/3/143B7583-6225-474F-88D5-5 ...

  6. codeforces #260 DIV 2 C题Boredom(DP)

    题目地址:http://codeforces.com/contest/456/problem/C 脑残了. .DP仅仅DP到了n. . 应该DP到10w+的. . 代码例如以下: #include & ...

  7. linux核心之进程管理

    进程就是处于执行期的程序(目标码存放在某中介质上).进程并不仅仅局限于一段可执行程序代码,通常还包括其他资源,例如打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间 ...

  8. 深入理解 IE haslayout

    转载自Bubblings Blog 原文地址:http://riny.net/2013/haslayout/ 1.什么是haslayout layout是windows IE的一个私有概念,它决定了元 ...

  9. Android SQLite之乐学成语项目数据库存储

    一.SQLite是什么?为什么要用SQLite?SQLite有什么特点?(下面小编一 一解答) ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持 标 ...

  10. C++运算符详解问题详解

    有关C++运算符的细节,先来看一个题目: int main() { int a[] = {2, 4, 6, 8, 10}, *p, **k; p = a; k = &p; printf(&qu ...