Wow! Such Sequence! (线段树) hdu4893
http://acm.hdu.edu.cn/showproblem.php?pid=4893
先贴上一份还没过的代码,不知道拿出错了 1 // by caonima
2 // hehe
3 #include <cstring>
4 #include <algorithm>
5 #include <cstdio>
6 #include <queue>
7 #include <stack>
8 #include <vector>
9 #include <map>
10 #include <cmath>
11 #include <set>
12 #include <iostream>
13 #include <string>
14 using namespace std;
15 #define LL __int64
16 const int MAX = 1e6+;
17 const LL inf = 1LL<<;
18 LL sum[MAX<<],col[MAX<<],fib_sum[MAX<<],fib[MAX];
19 int cur=;
20 void init() {
21 fib[]=fib[]=;
22 for(int i=;i<MAX;i++) {
23 if(fib[i-]+fib[i-]>inf) break;
24 fib[i]=fib[i-]+fib[i-];
25 cur++;
26 }
27 return ;
28 }
29 void push_up(int o) {
30 fib_sum[o]=fib_sum[o<<]+fib_sum[o<<|];
31 sum[o]=sum[o<<]+sum[o<<|];
32 }
33 void push_down(int o) {
34 if(col[o]!=-) {
35 col[o<<]=col[o<<|]=col[o];
36 sum[o<<]=fib_sum[o<<];
37 sum[o<<|]=fib_sum[o<<|];
38 col[o]=-;
39 }
40 return;
41 }
42 void build(int L,int R,int o) {
43 if(L==R) {
44 sum[o]=;
45 fib_sum[o]=; col[o]=-;
46 return ;
47 }
48 int mid=(L+R)>>;
49 build(L,mid,o<<);
50 build(mid+,R,o<<|);
51 push_up(o);
52 }
53 void add(int L,int R,int o,int k,int val) {
54 if(L==R) {
55 sum[o]+=(LL)val;
56 int x=(int)(lower_bound(fib,fib+cur,sum[o])-fib);
57 // printf("%I64d %I64d\n",fib[x],fib[x-1]);
58 // printf("%I64d\n",sum[o]);
59
60 if(x==) fib_sum[o]=fib[x];
61 else if((-fib[x]+sum[o])>=(-fib[x-]+sum[o])) fib_sum[o]=fib[x-];
62 else fib_sum[o]=fib[x];
63 // printf("%I64d\n",fib_sum[o]);
64 return ;
65 }
66 push_down(o);
67 int mid=(L+R)>>;
68 if(k<=mid) add(L,mid,o<<,k,val);
69 else add(mid+,R,o<<|,k,val);
70 push_up(o);
71 }
72
73 void Update(int L,int R,int o,int ls,int rs) {
74 if(ls<=L&&rs>=R) {
75 sum[o]=fib_sum[o];
76 col[o]=;
77 return ;
78 }
79 push_down(o);
80 int mid=(L+R)>>;
81 if(ls<=mid) Update(L,mid,o<<,ls,rs);
82 if(rs>mid) Update(mid+,R,o<<|,ls,rs);
83 push_up(o);
84 }
85 LL Query(int L,int R,int o,int ls,int rs) {
86 if(ls<=L&&rs>=R) {
87 return sum[o];
88 }
89 push_down(o);
90 int mid=(L+R)>>;
91 LL res=;
92 if(ls<=mid) res+=Query(L,mid,o<<,ls,rs);
93 if(rs>mid) res+=Query(mid+,R,o<<|,ls,rs);
94 return res;
95
96 }
97 int main() {
98 int n,m,op,ls,rs;
99 init();
while(scanf("%d %d",&n,&m)==) {
build(,n,);
for(int i=;i<m;i++) {
scanf("%d %d %d",&op,&ls,&rs);
if(op==) {
add(,n,,ls,rs);
}
else if(op==) {
printf("%I64d\n",Query(,n,,ls,rs));
}
else {
Update(,n,,ls,rs);
}
}
}
return ;
116 }
Wow! Such Sequence! (线段树) hdu4893的更多相关文章
- 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区间上的所以数变成 ...
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- hdu4893Wow! Such Sequence! (线段树)
Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...
- HDU 6047 Maximum Sequence(线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- Codeforces 438D The Child and Sequence - 线段树
At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...
- hdu 5828 Rikka with Sequence 线段树
Rikka with Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5828 Description As we know, Rik ...
- hdu-5805 NanoApe Loves Sequence(线段树+概率期望)
题目链接: NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 ...
- Codeforces 486E LIS of Sequence(线段树+LIS)
题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...
随机推荐
- 清北考前刷题day4下午好
/* 辗转相除,每次计算多出现了几个数. */ #include<iostream> #include<cstdio> #include<cstring> #inc ...
- js获取标签的三种方式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Linux学习笔记之Linux用户与用户组、文件操作命令、文件权限剖析
1.用户与用户组 Linux是一个多用户操作系统,通过用户与用户组的概念,可以实现保证安全性和隐私性.任何一个文件都具有User.Group.Others三个权限. 文件拥有者(Linux下所有的东西 ...
- JavaScript--History 对象
history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都有自己的history ...
- python如何添加浏览器驱动路径
闲来无事,整一整python+selenium,写完代码后运行发现找不到webdriver的路径:之前是仿照java一样直接把webdriver放到浏览器的安装目录下 迫于无奈,只好查一下问题如何处理 ...
- 全面学习ORACLE Scheduler特性(7)Scheduler抛出的Events
四.使用Events Event直译对应的中文解释是指事件,不过单纯讲事件毕竟太抽象了,举个示例来形容吧.A(对应某个应用程序,或者是ORACLE中的进程)在干活时突然眉头一皱说道,不好,前方有情况, ...
- 26 c#类的组合
组合即将各个部分组合在一起.程序设计中就是用已有类的对象来产生新的类. 桌子由木板和钉子组合而成,台灯使用灯座,灯管,电线,接头等拼起来的.我们发现自己周围的很多东西都是由更小的其它东西拼凑构成的,就 ...
- Spring.Net学习笔记(7)-事务
一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...
- 一个JavaScript贷款计算器
通过本案例,将会学到: . 如何在文档中查找元素 . 如何通过表单input元素来获取用户的输入数据 . 如何通过文档元素来设置HTML内容 . 如何将数据存储在浏览器中 . 如何使用脚本发起HTTP ...
- 使用SpringMvc的一个注意事项
在Intelij Idea下,如果在新建项目时使用了自带的模板,那么自动生成的web.xml里的DispatcherServlet配置节点默认的servlet-mapping是这样的: 而习惯上,我们 ...