树状数组
wym_king
谁终将声震人间,必长久深自缄默;谁终将点燃闪电,必长久如云漂泊。
展开
-
HDU 1166 敌兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=1166题解:此题用树状数组来做,其操作为给某一个兵营增加或减少人数,以及询问i~j营地的人数,可以用树状数组维护前i个营地的人数总数,通过前j个营地的人数的总数减去前i-1个营地的人数总数就得到了i~j营地的总人数了。#include <iostream>#include <bit...原创 2018-07-25 09:39:27 · 118 阅读 · 0 评论 -
Codeforces #576 div 2 ABCD
A.暴力#include <bits/stdc++.h>using namespace std;int a[1000005];int main(){ int n,x,y,mi=0; scanf("%d %d %d",&n,&x,&y); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); }...原创 2019-07-31 10:24:56 · 147 阅读 · 0 评论 -
2019 HDU 多校赛第三场 HDU 6609 Find the answer(树状数组+二分答案 查询前k小)
题意: 多组询问,n个人,值m, 接下来n个值,要求当前值加上前面尽量多的值之和小于等于 m ,问前面要去掉几个值解:先离散化,然后用树状数组维护第 i 大 总和与总个数,二分答案,找到满足题意的前k小后判断第k+1小可以放多少个#include <bits/stdc++.h>#define ll long longusing namespace std;cons...原创 2019-07-29 23:50:00 · 396 阅读 · 3 评论 -
牛客挑战赛49 D筱玛爱线段树 线段树+树状数组计数
存下操作, 从后往前 用树状数组维护操作的次数, 编号从大到小,防止重复调用递归。然后再遍历一次,操作一的次数对线段树修改,大概 m*O(logn)#include <bits/stdc++.h>using namespace std;#define ll long longconst int maxn = 100005;const int mod = 1e9+7;...原创 2019-07-06 09:56:46 · 193 阅读 · 0 评论 -
Hdu 6534 莫队+树状数组
差值为 k ,则找 [x-k] 到 [x+k] 区间内的数树状数组维护个数#include <bits/stdc++.h>using namespace std;const int maxn = 500005;struct node{int l,r,id;int ans;}q[maxn];int s[maxn],Be[maxn];int z[maxn],ni[m...原创 2019-07-05 15:03:50 · 179 阅读 · 0 评论 -
Mato的文件管理 数据离散化+莫队+树状数组求逆序数
Mato的文件管理两两交换最小次数即为逆序数之和,没有告诉数据范围,就排序离散化对应。l变化时,区间左边元素,求和减去本身1为逆序数。 即本来有 sum(x) - 1个元素在我后面,现在我在第一个。r变化时,区间右边元素,区间长度减去 前缀和。即本来我在 n - sum(x) 个元素 前面,现在我在最后一个#include <bits/stdc++.h>...原创 2019-07-05 11:45:55 · 100 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链 离线树状数组计数
P1972 [SDOI2009]HH的项链对询问按照右端点排序,然后 计算按照树状数组求和计算 l,r = sum(r) - sum(l-1)对a[i] = x , vis[x] = i当值x没出现过 就add(x,1)出现过,add(vis[x],-1 ) , add(i,1)为什么要清除影响,因为你前面先对区间排序, r 递增,计算sum 时递减往前求和#inc...原创 2019-07-04 16:51:52 · 91 阅读 · 0 评论 -
树状数组详解+存储图
树状数组详解转载 2019-07-04 16:23:39 · 373 阅读 · 0 评论 -
HDU 1166
#include <string>#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>using namespace std;int n,m;int c[500005];int lowbit(int x){ return (-...原创 2019-05-25 20:16:36 · 280 阅读 · 0 评论 -
Preprefix sum 差分+树状数组
题意:求前缀和的前缀和,并有修改值操作。Si = S(i-1) + a[x]变为Si = S(i-1) +y。 修改值就是y - a[x]这里每个a[i]的值就是差分数组,一个树状数组维护就行。 S1+S2+S3+....+Si=a1+a1+a2+a1+a2+a3+.....+a1+a2+...+ai=a1*i+a2*(i-1)+...+ai=i*(a1+a2+.....原创 2019-04-07 20:57:40 · 174 阅读 · 0 评论 -
树状数组区间修改,单点查询
普通的单点修改单点查询就不讲了,从区间修改和单点查询讲起。 原来的值存在a[]里面,多建立个数组c1[],注意:c1[i]=a[i]-a[i-1]。 那么求a[i]的值的时候a[i]=a[i-1]+c1[i]=a[i-2]+c1[i]+c1[i-1]=…..=c1[1]+c1[2]+…+c1[i]。 所以就用c1[]建立树状数组,便可以很快查询a[i]的值。不多说,见代码。...转载 2019-03-04 20:03:50 · 119 阅读 · 0 评论 -
HDU 6318 树状数组求逆序数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 #define N 100005#include <bits/stdc++.h>using namespace std;int c[N]; int n;int lowbit(int i){ return i&(-i);}int insert(i...原创 2018-07-26 10:56:57 · 173 阅读 · 0 评论 -
树状数组逆序数
https://www.cnblogs.com/xiongmao-cpp/p/5043340.html 我们假设一个数组A[n],当A[n]=0时表示数字n在序列中没有出现过,A[n]=1表示数字n在序列中出现过。A对应的树状数组为c[n],则c[n]对应维护的是数组A[n]的内容,即树状数组c可用于求A中某个区间的值的和。 树状数组的插入函数(假设为 void inse...转载 2018-07-26 10:42:34 · 102 阅读 · 0 评论 -
区间更新与点值
#include<bits/stdc++.h>using namespace std;const int MAXN=100005;int n;int bit[MAXN];int c[MAXN],b[MAXN];int lowbit(int x) { return x & (-x);}void updata(int k,int v){//更新区间 ...原创 2018-07-25 19:31:24 · 238 阅读 · 0 评论 -
树状数组理论基础
树状数组(binary indexed trees,二进制索引树),最早由Peter M. Fenwick于1994年以“A New Data Structure for Cumulative Frequency Tables"为题发表在SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(cumulative frequency)的计算问题,现多...原创 2018-07-25 10:14:54 · 182 阅读 · 0 评论