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的更多相关文章

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

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

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

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

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

  4. 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 ...

  5. hdu4893Wow! Such Sequence! (线段树)

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

  6. HDU 6047 Maximum Sequence(线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  7. 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 ...

  8. hdu 5828 Rikka with Sequence 线段树

    Rikka with Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5828 Description As we know, Rik ...

  9. hdu-5805 NanoApe Loves Sequence(线段树+概率期望)

    题目链接: NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 262144/131072 ...

  10. Codeforces 486E LIS of Sequence(线段树+LIS)

    题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...

随机推荐

  1. XML消息解析_php

    初识php——微信消息处理 <?php $test = new weixin(); $test->Message(); class weixin{ public function Mess ...

  2. 使用 script 的 module 属性实现 es6 以上的兼容

    几个月前看到了这篇文章 https://philipwalton.com/articles/deploying-es2015-code-in-production-today/,给了我很大的启发,本来 ...

  3. BACnet开发资料与调试工具

    一.开发资料 1.认识BACnet协议 2.BACnet网络讲义: 链接:https://pan.baidu.com/s/1A6OOUxvJe1zIYbockqTEsQ提取码:wz49 二.调试工具 ...

  4. Linux文件详解

    一.Linux文件类型分:普通文件.目录文件.链接文件.设备文件.管道文件. 1.普通文件:由ls -al显示属性时,第一个属性为 [-],例如 [-rwxrwxrwx].包括: 纯文本文件(ASCI ...

  5. [GDOI2014]拯救莫莉斯

    题目描述 莫莉斯·乔是圣域里一个叱咤风云的人物,他凭借着自身超强的经济头脑,牢牢控制了圣域的石油市场. 圣域的地图可以看成是一个n*m的矩阵.每个整数坐标点(x , y)表示一座城市吗,两座城市间相邻 ...

  6. 2017杭电多校06Rikka with Graph

    Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. DFS/BFS(同余模) POJ 1426 Find The Multiple

    题目传送门 /* 题意:找出一个0和1组成的数字能整除n DFS:200的范围内不会爆long long,DFS水过~ */ /************************************ ...

  8. ACM_输出格式

    输出格式 Time Limit: 2000/1000ms (Java/Others) Problem Description: 某水比参加了XX杯,但是他太水,所以三等都木有,所以他决定出一道水题水一 ...

  9. ACM_同余+暴力找规律

    小光的忧伤 Time Limit: 2000/1000ms (Java/Others) Problem Description: 锴神:我尊重作者原意,你们出什么我就加什么.于是小光打了道水题(也就是 ...

  10. TensorFlow---基础---GFile

    使用TensorFlow的时候经常遇到 tf.gfile.exists().... 关于gfile,一个googler是这样给出的解释: The main roles of the tf.gfile ...