hdu 1166 树状数组模板题】的更多相关文章

#include<stdio.h> #include<string.h> #define N  51000 int  c[N],n; int number(int x) { return x&-x; } void creat(int a,int x) { int i; for(i=a;i<=n;i+=number(i)) c[i]+=x; } int sum(int x) { int h=0,i; for(i=x;i>0;i-=number(i))      …
题意: 汉语题就不说题意了,用到单点修改和区间查询(树状数组和线段树都可以) 思路: 树状数组的单点查询,单点修改和区间查询. 树状数组是巧妙运用二进制的规律建树,建树就相当于单点修改.这里面用到一个lowbit的概念,将数的下标转化为二进制.找到值为1的最低位.前面的数舍去,判断这个数为几,那么这个数组的当前下标储存的值从这个下标开始往前的前几项和. 不是特别懂,先拿来用了 在树状数组里面求区间和,并不能直接求到,需要求两个区间之间的差. 树状数组: #include<stdio.h> #i…
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 128380    Accepted Submission(s): 53795 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任…
思路:就是树状数组的模板题,利用的就是单点更新和区间求和是树状数组的强项时间复杂度为m*log(n) 没想到自己以前把这道题当线段树的单点更新刷了. 树状数组: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; int tree[maxn], n; void add(int k, int num) { while (k <= n) { tree[k] += nu…
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 35307    Accepted Submission(s): 14974 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就…
线段树 (本题无需建树,少了很多) #include<cstdio> #include<cstring> int sum[5000005],rt,data,lb,rb,n,m; void add(int p,int l,int r,int now)//data新加的数 第p个位置 第now个子树 { sum[now]+=data; if(l==r) return; int mid=(l+r)/2; if(p<=mid) add(p,l,mid,2*now); else add…
開始用瓜神说的方法撸了一发线段树.早上没事闲的看了一下树状数组的方法,于是又写了一发树状数组 树状数组: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #includ…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 解题思路: 题意为询问一段区间里的数能组成多少段连续的数.先考虑从左往右一个数一个数添加,考虑当前添加了i - 1个数的答案是x,那么添加完i个数后的答案是多少?可以看出,是根据a[i]-1和a[i]+1是否已经添加而定的,如果a[i]-1或者a[i]+1已经添加一个,则段数不变,如果都没添加则段数加1,如果都添加了则段数减1.设v[i]为加入第i个数后的改变量,那么加到第x数时的段数就是su…
题目链接 描述 You are given an N × N matrix. At the beginning every element is 0. Write a program supporting 2 operations: 1. Add x y value: Add value to the element Axy. (Subscripts starts from 0 2. Sum x1 y1 x2 y1: Return the sum of every element Axy for…
点修改 区间求和 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <sstream> #include <string> #include <…