主题链接: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. php mysql 数据库写入与读取取文件

    近期的项目由于特殊原因,需要将文件存到数据库中.今天特地测试,首先在php网站上传文件,将文件读取出来——再存入到MySQL数据库中. 一.首先创建php 代码如下(网上找了段代码进行过修改):源代码 ...

  2. hdu 4630 No Pain No Game 线段树离线处理

    题目链接 求出一个区间内任意两个数的gcd的最大值. 先将询问读进来然后按r值排序. 将每一个数因数分解, 对每一个因子x, 如果pre[x]!=-1, 那么就更新update(pre[x], x, ...

  3. 转: Apache SSI详解及应用

    转: Apache SSI详解及应用 什么是 SSI? SSI(Server Side Includes),是嵌套在 HTML 网页中的指示语句,由后台服务器进行代码的解释计算.使用 SSI 可以动态 ...

  4. HttpWebRequest使用注意(发生阻塞的解决办法)

    原文 http://www.cnblogs.com/Fooo/archive/2008/10/31/1323400.html HttpWebRequest使用注意(发生阻塞的解决办法) , count ...

  5. Html 小插件9 腾讯新闻

    地址:http://minisite.qq.com/others08/ 效果:

  6. 使用tcpdump抓Android网络包

    1 抓包原理 tcpdump(需Root用户运行)拦截和显示发送或收到过网络连接到该机器的TCP/IP和其他数据包.简单说就监控手机进出网络数据. 2 方法优劣 2.1优点 1.手机数据包无遗漏 2. ...

  7. UVA 11475 Extend to Palindrome(后缀数组+ST表)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/27647 [题目大意] 给出一个字符串,要求在其后面添加最少的字符数,使得其成为一个回文串.并输出这个回文串 ...

  8. ollicle.com: Biggerlink – jQuery plugin

    ollicle.com: Biggerlink – jQuery plugin Biggerlink – jQuery plugin Purpose Demo Updated for jQuery 1 ...

  9. nginx access log logrotate配置

    /home/deployuser/deploy/nginx/temp/logs/home.access.log {   size 100M   rotate 100    nocompress   d ...

  10. Oracle触发器(trigger):view,schema,database

    视图trigger, instead of 我们知道如果一个view只是由一个table构成,那在view上做啥操作没太多限制.如果view是由多个table组成那在view上做啥unpdate,in ...