【HDU】4893 Wow! Such Sequence! 线段树
来源:互联网 发布:mysql批量更新数据手动 编辑:程序博客网 时间:2024/05/19 16:34
传送门:【HDU】4893 Wow! Such Sequence!
题目分析:
比赛中错了五次才过= =||,我简直逗比。。明显应该对该段是否为Fibonacci数做标记的,如果都是Fibonacci数,那么就不用管了,否则更新到包含的段内全是Fibonacci数或者叶子节点为止就好了。。。
其他的都是一些逗比操作,就不说了。。
重写又错了两次T U T
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int i = a ; i < b ; ++ i )#define REV( i , a , b ) for ( int i = a - 1 ; i >= b ; -- i )#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define FOV( i , a , b ) for ( int i = a ; i >= b ; -- i )#define ls ( o << 1 )#define rs ( o << 1 | 1 )#define lson ls , l , m#define rson rs , m + 1 , r#define rt o , l , r#define root 1 , 1 , n#define mid ( ( l + r ) >> 1 )#define CLR( a , x ) memset ( a , x , sizeof a )typedef long long LL ;const int MAXN = 100005 ;const int MAXF = 80 ;const LL INF = 1e18 ;LL f[MAXF] ;bool set[MAXN << 2] ;LL sum[MAXN << 2] ;LL search ( LL x ) {int l = 1 , r = MAXF ;while ( l < r ) {int m = mid ;if ( f[m] >= x )r = m ;elsel = m + 1 ;}if ( x - f[l - 1] <= f[l] - x )return f[l - 1] ;return f[l] ;}void pushup ( int o ) {if ( set[ls] && set[rs] )set[o] = 1 ;elseset[o] = 0 ;sum[o] = sum[ls] + sum[rs] ;}void pushdown ( int o ) {if ( set[o] ) {set[ls] = set[rs] = set[o] ;set[o] = 0 ;}}void build ( int o , int l , int r ) {sum[o] = 0 ;set[o] = 0 ;if ( l == r )return ;int m = mid ;build ( lson ) ;build ( rson ) ;}void modify ( int pos , int x , int o , int l , int r ) {if ( l == r ) {sum[o] += x ;if ( sum[o] == search ( sum[o] ) )set[o] = 1 ;set[o] = 0 ;return ;}pushdown ( o ) ;int m = mid ;if ( pos <= m )modify ( pos , x , lson ) ;elsemodify ( pos , x , rson ) ;pushup ( o ) ;}void update ( int L , int R , int o , int l , int r ) {if ( set[o] )return ;if ( l == r ) {sum[o] = search ( sum[o] ) ;set[o] = 1 ;return ;}pushdown ( o ) ;int m = mid ;if ( L <= m )update ( L , R , lson ) ;if ( m < R )update ( L , R , rson ) ;pushup ( o ) ;}LL query ( int L , int R , int o , int l , int r ) {if ( L <= l && r <= R )return sum[o] ;pushdown ( o ) ;int m = mid ;LL ans = 0 ;if ( L <= m )ans += query ( L , R , lson ) ;if ( m < R )ans += query ( L , R , rson ) ;pushup ( o ) ;return ans ;}void fun () {f[0] = f[1] = 1 ;REP ( i , 2 , MAXF )f[i] = f[i - 1] + f[i - 2] ;}void solve () {int n , m ;int ch , l , r ;fun () ;while ( ~scanf ( "%d%d" , &n , &m ) ) {build ( root ) ;REP ( i , 0 , m ) {scanf ( "%d%d%d" , &ch , &l , &r ) ;if ( ch == 1 )modify ( l , r , root ) ;if ( ch == 2 )printf ( "%I64d\n" , query ( l , r , root ) ) ;if ( ch == 3 )update ( l , r , root ) ;}}}int main () {solve () ;return 0 ;}
0 0
- hdu 4893 Wow! Such Sequence! 线段树
- hdu 4893 Wow! Such Sequence!(线段树)
- HDU Wow! 4893 Such Sequence!(线段树)
- 【HDU】4893 Wow! Such Sequence! 线段树
- HDU 4893 Wow! Such Sequence!(线段树)
- HDU 4893 Wow! Such Sequence! 线段树
- 【HDU 4893 多校联合】 Wow! Such Sequence!【线段树】
- HDU 4893 Wow! Such Sequence! (线段树)
- HDU 4893 Wow! Such Sequence! 解题报告(线段树)
- hdu 4893 Wow! Such Sequence! (线段树+ 心得)
- ACM 线段树模板 hdu 4893 Wow! Such Sequence!
- 【线段树】 HDOJ 4893 Wow! Such Sequence!
- [HDOJ 4893] Wow! Such Sequence! [线段树]
- Wow! Such Sequence!(线段树4893)
- hdu 4893Wow! Such Sequence!
- HDU 4893 Wow! Such Sequence!
- hdu 4893 Wow! Such Sequence!
- HDU 4893(Wow! Such Sequence!)
- iPhone模拟触屏实现事件教程
- 保持谦逊
- 140729暑期培训.txt
- 浅谈IOS开发中委托(Delegate)的使用
- Android内存管理之道
- 【HDU】4893 Wow! Such Sequence! 线段树
- printk()
- hdoj 1406 完数
- OnClose()与 OnDestroy()
- HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车
- Oracle 将表中多条记录的同一字段汇总输出
- Delphi中怎么调用VC++创建的动态链接库
- HDU 4886 TIANKENG’s restaurant(Ⅱ)
- 有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)。