差分数组,前缀和

 1 /*************************************************************************
 2     > File Name: a.cpp
 3     > Author: QWX
 4     > Mail:
 5     > Created Time: 2018/11/11 9:43:08
 6  ************************************************************************/
 7
 8
 9 //{{{ #include
10 #include<iostream>
11 #include<cstdio>
12 #include<algorithm>
13 #include<vector>
14 #include<cmath>
15 #include<queue>
16 #include<map>
17 #include<set>
18 #include<string>
19 #include<cstring>
20 #include<complex>
21 #include<cassert>
22 //#include<bits/stdc++.h>
23 #define vi vector<int>
24 #define pii pair<int,int>
25 #define mp make_pair
26 #define pb push_back
27 #define fi first
28 #define se second
29 #define pw(x) (1ll << (x))
30 #define sz(x) ((int)(x).size())
31 #define all(x) (x).begin(),(x).end()
32 #define rep(i,l,r) for(int i=(l);i<(r);i++)
33 #define per(i,r,l) for(int i=(r);i>=(l);i--)
34 #define FOR(i,l,r) for(int i=(l);i<=(r);i++)
35 #define cl(a,b) memset(a,b,sizeof(a))
36 #define fastio ios::sync_with_stdio(false);cin.tie(0);
37 #define lson l , mid , ls
38 #define rson mid + 1 , r , rs
39 #define INF 0x3f3f3f3f
40 #define LINF 0x3f3f3f3f3f3f3f3f
41 #define ll long long
42 #define ull unsigned long long
43 #define dd(x) cout << #x << " = " << (x) << ","
44 #define de(x) cout << #x << " = " << (x) << "\n"
45 #define endl "\n"
46 using namespace std;
47 //}}}
48
49 const int N=1e5+7;
50 typedef int arr[N];
51 arr a,s,d,ans;
52 int main()
53 {
54     int n;scanf("%d",&n);
55     FOR(i,1,n)scanf("%d",&a[i]);
56     FOR(i,1,n)scanf("%d",&s[i]),s[i]+=s[i-1];
57     FOR(i,1,n){
58         int t=lower_bound(s+i,s+n+1,s[i-1]+a[i])-s;
59         if(t==i)ans[i]+=a[i];
60         else if(t==n+1)d[i]++;
61         else {
62             d[i]++,d[t]--,ans[t]+=a[i]-(s[t-1]-s[i-1]);
63         }
64     }
65     FOR(i,1,n)d[i]+=d[i-1],printf("%d%c",ans[i]+d[i]*(s[i]-s[i-1]),i==n?‘\n‘:‘ ‘);
66     return 0;
67 }

原文地址:https://www.cnblogs.com/klaycf/p/9953410.html

时间: 2024-08-04 01:43:33

差分数组,前缀和的相关文章

Karen and Coffee CodeForces - 816B (差分数组+预处理前缀和)

To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, wants to know the optimal temperature for brewing the perfect cup of coffee. Indeed, she has spent some time reading several recipe books, including the u

差分数组与前缀和

前缀和 前缀和顾名思义就是前面i个数的总和. 假设有一个序列A,前缀和为S.根据概念很容易知到公式 \(S[i]=\displaystyle \sum_{j=1}^iA[j]\) 如何求区间\([l,r]\)的和呢? \(sum[l,r]=s[r]-s[l-1]\) 那如果要对多个不同区间 \([l,r]\)进行加减操作呢?然后输出某个区间\([l,r]\)的区间和,接下来就要用到差分数组了 差分数组 设原数组为\(A[i]\),差分数组为\(B[i]\),则: \[B[i]=\begin{ca

树状数组差分求前缀和的前缀和

既然我们知道树状数组可以差分求前缀和 那么就可以对其进行 前缀和 求变量值 展开可得 $(k+1)*\sum_{i}^n c[i]-\sum_{i}^n i*c[i]$ 两个 树状数组可以搞定 顺便提一下DFS序  可以将树上问题转化为区间问题 对节点重新编号 并且有从属关系  从而 利用各种数据结构 例如 树剖  树状数组解决 原文地址:https://www.cnblogs.com/OIEREDSION/p/11380443.html

HDU-1556 Color the ball 【差分数组】

Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <=

差分数组

介绍: 区间修改查询问题一般会想到用线段树或者树状数组来做,但是题目是离线查询,即完成修改后再查询的话,可以用到差分数组. 差分数组: 对于数组a[i],我们令d[i]=a[i]-a[i-1]  (特殊的,第一个为d[1]=a[1]),则d[i]为一个差分数组. 我们发现统计d数组的前缀和sum数组,有 sum[i]=d[1]+d[2]+d[3]+...+d[i]=a[1]+a[2]-a[1]+a[3]-a[2]+...+a[i]-a[i-1]=a[i],即前缀和sum[i]=a[i]: 因此每

浅谈差分数组的原理及简单应用

一.差分数组的定义及用途 1.定义: 对于已知有n个元素的离线数列d,我们可以建立记录它每项与前一项差值的差分数组f:显然,f[1]=d[1]-0=d[1];对于整数i∈[2,n],我们让f[i]=d[i]-d[i-1]. 2.简单性质: (1)计算数列各项的值:观察d[2]=f[1]+f[2]=d[1]+d[2]-d[1]=d[2]可知,数列第i项的值是可以用差分数组的前i项的和计算的,即d[i]=f[i]的前缀和. (2)计算数列每一项的前缀和:第i项的前缀和即为数列前i项的和,那么推导可知

树状数组区间修改,区间更新:差分数组的运用

树状数组最原始的作用就是求前缀和,可以实现单点修改和区间查询. 但是假设现在有: 1.区间修改,单点查询 2.区间修改,区间查询 但是又不想敲线段树怎么办? 就用树状数组喽. 假设现在有一个原数组a(假设a[0] = 0),有一个数组d,d[i] = a[i] - a[i-1],那么 a[i] = d[1] + d[2] + .... + d[i] d数组就是差分数组 所以求a[i]就可以用树状数组维护d[i]的前缀和 区间修改,单点查询: 根据d的定义,对[l,r]区间加上x,那么a[l]和a

差分数组 and 树上差分

差分数组 定义 百度百科中的差分定义 //其实这完全和要讲的没关系 qwq 进去看了之后是不是觉得看不懂? 那我简单概括一下qwq 差分数组de定义:记录当前位置的数与上一位置的数的差值. 栗子 容易发现的是,\(\sum_{j=1}^{i} b_j\)即代表\(a_i\) 的值. \((\sum\) 即代表累加.) 思想 看到前面的\(\sum\) 你一定会发现这是前缀和! 那你认为这是前缀和? 的确是qwq. 实际上这并不是真正意义上的前缀和. 前缀和的思想是 根据元素与元素之间的并集关系(

P1083 借教室 差分数组

第一行包含两个正整数n,mn,m,表示天数和订单的数量. 第二行包含nn个正整数,其中第ii个数为r_iri?,表示第ii天可用于租借的教室数量. 接下来有mm行,每行包含三个正整数d_j,s_j,t_jdj?,sj?,tj?,表示租借的数量,租借开始.结束分别在第几天. 每行相邻的两个数之间均用一个空格隔开.天数与订单均用从11开始的整数编号. 输出格式: 如果所有订单均可满足,则输出只有一行,包含一个整数00.否则(订单无法完全满足) 输出两行,第一行输出一个负整数-1−1,第二行输出需要修

数据结构之差分数组

2019-06-25 推荐博客阅读:https://www.sohu.com/a/271430685_100201031 一. 适合解决的问题 有n个数.m次操作,每一次操作,给定l,r,del.将l~r区间的所有数增加del:最后有q个询问,给你 l,r ,每一次询问求出l~r的区间和. 注明: 先进行m个修改操作,后进行查询操作. 涉及到的用途有 快速处理区间加减操作:O(1) 询问区间和:O(n)处理O(1)查询. 二. 算法解释 差分数组定义:记录当前位置的数与上一位置的数的差值.  我