题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数,

并且是最小的那个。

析:觉得应该是线段树的,但是。。。不会啊。。。就想胡搞一下。

所以用了树状数组,也就是和的,然后用一个set来维护每个不是Fibnoccia的数,然后再进行计算。

代码如下:

  1. #pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <iostream>
  7. #include <cstring>
  8. #include <set>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <map>
  13. #include <cctype>
  14. #include <cmath>
  15. #include <stack>
  16. //#include <tr1/unordered_map>
  17. #define freopenr freopen("in.txt", "r", stdin)
  18. #define freopenw freopen("out.txt", "w", stdout)
  19. using namespace std;
  20. //using namespace std :: tr1;
  21.  
  22. typedef long long LL;
  23. typedef pair<int, int> P;
  24. const int INF = 0x3f3f3f3f;
  25. const double inf = 0x3f3f3f3f3f3f;
  26. const LL LNF = 0x3f3f3f3f3f3f;
  27. const double PI = acos(-1.0);
  28. const double eps = 1e-8;
  29. const int maxn = 1e5 + 5;
  30. const LL mod = 10000000000007;
  31. const int N = 1e6 + 5;
  32. const int dr[] = {-1, 0, 1, 0, 1, 1, -1, -1};
  33. const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1};
  34. const int hr[]= {-2, -2, -1, -1, 1, 1, 2, 2};
  35. const int hc[]= {-1, 1, -2, 2, -2, 2, -1, 1};
  36. const char *Hex[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
  37. inline LL gcd(LL a, LL b){ return b == 0 ? a : gcd(b, a%b); }
  38. int n, m;
  39. const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  40. const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  41. inline int Min(int a, int b){ return a < b ? a : b; }
  42. inline int Max(int a, int b){ return a > b ? a : b; }
  43. inline LL Min(LL a, LL b){ return a < b ? a : b; }
  44. inline LL Max(LL a, LL b){ return a > b ? a : b; }
  45. inline bool is_in(int r, int c){
  46. return r >= 0 && r < n && c >= 0 && c < m;
  47. }
  48. LL sum1[maxn<<1], a[maxn];
  49. LL F[150];
  50. int cnt;
  51. set<int> sets;
  52. set<int> :: iterator it;
  53. int lowbit(int x){ return x & (-x); }
  54.  
  55. void add1(int x, LL d){
  56. while(x <= n){
  57. sum1[x] += d;
  58. x += lowbit(x);
  59. }
  60. }
  61.  
  62. LL qurey1(int x){
  63. LL ans = 0;
  64. while(x > 0){
  65. ans += sum1[x];
  66. x -= lowbit(x);
  67. }
  68. return ans;
  69. }
  70.  
  71. void solve(int l, int r){
  72. it = sets.lower_bound(l);
  73. while(it != sets.end() && *it <= r){
  74. LL *tmp = lower_bound(F+1, F+cnt, a[*it]);
  75. if(a[*it] == *tmp){ sets.erase(it++); continue; }
  76. LL *tmpp = tmp - 1;
  77. if(*tmp - a[*it] >= a[*it] - *tmpp){
  78. add1(*it, *tmpp - a[*it]);
  79. a[*it] = *tmpp;
  80. sets.erase(it++);
  81. }
  82. else{
  83. add1(*it, *tmp - a[*it]);
  84. a[*it] = *tmp;
  85. sets.erase(it++);
  86. }
  87. }
  88. }
  89. int main(){
  90. F[0] = F[1] = 1;
  91. cnt = 2;
  92. while(1){
  93. F[cnt] = F[cnt-1] + F[cnt-2];
  94. if(F[cnt] > (1LL<<61)) break;
  95. ++cnt;
  96. }
  97. ++cnt;
  98. while(scanf("%d %d", &n, &m) == 2){
  99. sets.clear();
  100. for(int i = 0; i <= n; ++i){
  101. sum1[i] = a[i] = 0;
  102. sets.insert(i);
  103. }
  104. int l, r, x;
  105. for(int i = 0; i < m; ++i){
  106. scanf("%d", &x);
  107. if(1 == x){
  108. scanf("%d %d", &l, &r);
  109. a[l] += r;
  110. sets.insert(l);
  111. add1(l, (LL)r);
  112. }
  113. else if(2 == x){
  114. scanf("%d %d", &l, &r);
  115. printf("%I64d\n", qurey1(r) - qurey1(l-1));
  116. }
  117. else if(3 == x){
  118. scanf("%d %d", &l, &r);
  119. solve(l, r);
  120. }
  121. }
  122. }
  123. return 0;
  124. }

HDU 4893 Wow! Such Sequence! (树状数组)的更多相关文章

  1. HDU 5057 Argestes and Sequence --树状数组(卡内存)

    题意:给n个数字,每次两种操作: 1.修改第x个数字为y. 2.查询[L,R]区间内第D位为P的数有多少个. 解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过 ...

  2. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  3. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  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 6078 Wavel Sequence 树状数组优化DP

    Wavel Sequence Problem Description Have you ever seen the wave? It's a wonderful view of nature. Lit ...

  6. HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number                         ...

  7. HDU 2689 Sort it【树状数组】

    Sort it Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. HDU 5862 Counting Intersections (树状数组)

    Counting Intersections 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 Description Given ...

  9. hdu 5592 ZYB's Game 树状数组

    ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...

随机推荐

  1. 匿名函数--lambda函数

    匿名函数 匿名函数:为了解决一些功能很简单的需求而设计的一句话函数 (python对匿名函数支持有限,只有一些简单的条件下可以用匿名函数) 匿名函数固定格式: func = lambda *args: ...

  2. oracle 启动监听报错TNS-12547: TNS:lost contact

    https://blog.csdn.net/liqfyiyi/article/details/7534018

  3. java数据结构和算法09(哈希表)

    树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...

  4. Spring事务管理概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/transaction-management.html: 数据库事务是一个被视为单一的工作单元的操作 ...

  5. 一个重绘MFC的文件传输client

     一个重绘MFC的文件传输client,TCP/IP协议的文件传输client(支持上传.下载.续传.管理等功能,本处仅仅选择了上传功能).从用户视觉上看,肯定比原生MFC界面要有感觉,啥也不说了 ...

  6. eclipse maven 插件的安装和配置

    maven3 安装: 安装 Maven 之前要求先确定你的 JDK 已经安装配置完毕.Maven是 Apache 下的一个项目.眼下最新版本号是 3.0.4.我用的也是这个. 首先去官网下载 Mave ...

  7. MaterialImageView

    https://github.com/zhaozhentao/MaterialImageView

  8. HDFS集中式缓存管理(Centralized Cache Management)

    Hadoop从2.3.0版本号開始支持HDFS缓存机制,HDFS同意用户将一部分文件夹或文件缓存在HDFS其中.NameNode会通知拥有相应块的DataNodes将其缓存在DataNode的内存其中 ...

  9. Vue框架之组件系统

    1,Vue组件系统之全局组件 1.1Vue全局组件的在实例化调用Vue的模板中导入组件的名称 <!DOCTYPE html> <html lang="zh-cn" ...

  10. centos6.5 yum安装MySQL5.6

    创建MySQL用户 #useradd mysql #passwd mysql #chmod u+w /etc/sudoers #vi /etc/sudoers mysql ALL=(ALL) ALL ...