HDU 4893 Wow! Such Sequence! (树状数组)
题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数,
并且是最小的那个。
析:觉得应该是线段树的,但是。。。不会啊。。。就想胡搞一下。
所以用了树状数组,也就是和的,然后用一个set来维护每个不是Fibnoccia的数,然后再进行计算。
代码如下:
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include <cstdio>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- #include <iostream>
- #include <cstring>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <vector>
- #include <map>
- #include <cctype>
- #include <cmath>
- #include <stack>
- //#include <tr1/unordered_map>
- #define freopenr freopen("in.txt", "r", stdin)
- #define freopenw freopen("out.txt", "w", stdout)
- using namespace std;
- //using namespace std :: tr1;
- typedef long long LL;
- typedef pair<int, int> P;
- const int INF = 0x3f3f3f3f;
- const double inf = 0x3f3f3f3f3f3f;
- const LL LNF = 0x3f3f3f3f3f3f;
- const double PI = acos(-1.0);
- const double eps = 1e-8;
- const int maxn = 1e5 + 5;
- const LL mod = 10000000000007;
- const int N = 1e6 + 5;
- const int dr[] = {-1, 0, 1, 0, 1, 1, -1, -1};
- const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1};
- const int hr[]= {-2, -2, -1, -1, 1, 1, 2, 2};
- const int hc[]= {-1, 1, -2, 2, -2, 2, -1, 1};
- const char *Hex[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
- inline LL gcd(LL a, LL b){ return b == 0 ? a : gcd(b, a%b); }
- int n, m;
- const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- inline int Min(int a, int b){ return a < b ? a : b; }
- inline int Max(int a, int b){ return a > b ? a : b; }
- inline LL Min(LL a, LL b){ return a < b ? a : b; }
- inline LL Max(LL a, LL b){ return a > b ? a : b; }
- inline bool is_in(int r, int c){
- return r >= 0 && r < n && c >= 0 && c < m;
- }
- LL sum1[maxn<<1], a[maxn];
- LL F[150];
- int cnt;
- set<int> sets;
- set<int> :: iterator it;
- int lowbit(int x){ return x & (-x); }
- void add1(int x, LL d){
- while(x <= n){
- sum1[x] += d;
- x += lowbit(x);
- }
- }
- LL qurey1(int x){
- LL ans = 0;
- while(x > 0){
- ans += sum1[x];
- x -= lowbit(x);
- }
- return ans;
- }
- void solve(int l, int r){
- it = sets.lower_bound(l);
- while(it != sets.end() && *it <= r){
- LL *tmp = lower_bound(F+1, F+cnt, a[*it]);
- if(a[*it] == *tmp){ sets.erase(it++); continue; }
- LL *tmpp = tmp - 1;
- if(*tmp - a[*it] >= a[*it] - *tmpp){
- add1(*it, *tmpp - a[*it]);
- a[*it] = *tmpp;
- sets.erase(it++);
- }
- else{
- add1(*it, *tmp - a[*it]);
- a[*it] = *tmp;
- sets.erase(it++);
- }
- }
- }
- int main(){
- F[0] = F[1] = 1;
- cnt = 2;
- while(1){
- F[cnt] = F[cnt-1] + F[cnt-2];
- if(F[cnt] > (1LL<<61)) break;
- ++cnt;
- }
- ++cnt;
- while(scanf("%d %d", &n, &m) == 2){
- sets.clear();
- for(int i = 0; i <= n; ++i){
- sum1[i] = a[i] = 0;
- sets.insert(i);
- }
- int l, r, x;
- for(int i = 0; i < m; ++i){
- scanf("%d", &x);
- if(1 == x){
- scanf("%d %d", &l, &r);
- a[l] += r;
- sets.insert(l);
- add1(l, (LL)r);
- }
- else if(2 == x){
- scanf("%d %d", &l, &r);
- printf("%I64d\n", qurey1(r) - qurey1(l-1));
- }
- else if(3 == x){
- scanf("%d %d", &l, &r);
- solve(l, r);
- }
- }
- }
- return 0;
- }
HDU 4893 Wow! Such Sequence! (树状数组)的更多相关文章
- HDU 5057 Argestes and Sequence --树状数组(卡内存)
题意:给n个数字,每次两种操作: 1.修改第x个数字为y. 2.查询[L,R]区间内第D位为P的数有多少个. 解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过 ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- hdu 5517 Triple(二维树状数组)
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 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区间上的所以数变成 ...
- HDU 6078 Wavel Sequence 树状数组优化DP
Wavel Sequence Problem Description Have you ever seen the wave? It's a wonderful view of nature. Lit ...
- HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number ...
- HDU 2689 Sort it【树状数组】
Sort it Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 5862 Counting Intersections (树状数组)
Counting Intersections 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 Description Given ...
- 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 ...
随机推荐
- 匿名函数--lambda函数
匿名函数 匿名函数:为了解决一些功能很简单的需求而设计的一句话函数 (python对匿名函数支持有限,只有一些简单的条件下可以用匿名函数) 匿名函数固定格式: func = lambda *args: ...
- oracle 启动监听报错TNS-12547: TNS:lost contact
https://blog.csdn.net/liqfyiyi/article/details/7534018
- java数据结构和算法09(哈希表)
树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...
- Spring事务管理概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/transaction-management.html: 数据库事务是一个被视为单一的工作单元的操作 ...
- 一个重绘MFC的文件传输client
一个重绘MFC的文件传输client,TCP/IP协议的文件传输client(支持上传.下载.续传.管理等功能,本处仅仅选择了上传功能).从用户视觉上看,肯定比原生MFC界面要有感觉,啥也不说了 ...
- eclipse maven 插件的安装和配置
maven3 安装: 安装 Maven 之前要求先确定你的 JDK 已经安装配置完毕.Maven是 Apache 下的一个项目.眼下最新版本号是 3.0.4.我用的也是这个. 首先去官网下载 Mave ...
- MaterialImageView
https://github.com/zhaozhentao/MaterialImageView
- HDFS集中式缓存管理(Centralized Cache Management)
Hadoop从2.3.0版本号開始支持HDFS缓存机制,HDFS同意用户将一部分文件夹或文件缓存在HDFS其中.NameNode会通知拥有相应块的DataNodes将其缓存在DataNode的内存其中 ...
- Vue框架之组件系统
1,Vue组件系统之全局组件 1.1Vue全局组件的在实例化调用Vue的模板中导入组件的名称 <!DOCTYPE html> <html lang="zh-cn" ...
- centos6.5 yum安装MySQL5.6
创建MySQL用户 #useradd mysql #passwd mysql #chmod u+w /etc/sudoers #vi /etc/sudoers mysql ALL=(ALL) ALL ...