Double Sum 3:简单计数题。

思路

首先考虑单个区间的 \(f\) 值如何计算,显然等于值域上连续段的个数。那么我们进一步观察值域上连续段的性质,发现一个连续段的开头一定满足比开头小 \(1\) 的数字不存在于区间中的特点。

于是我们就可以考虑对每一个数字计算贡献了。同样,一个数字 \(a\) 的贡献只有当区间包含 \(a\) 且不包含 \(a-1\) 的时候才为 \(1\),其他都是 \(0\)。因为只有这样才能组成一个连续段的开头,而我们的贡献就是以开头来计数的。当然这里以连续段结尾来计数也没有问题。

因此只需要对每个数计算包含 \(a\) 且不包含 \(a-1\) 的区间个数即可。具体实现上,我们可以前后扫一遍,维护一个桶,包含 \(a\) 的区间我们钦定让最后面的那个 \(a\) 计算贡献,然后排除掉包含 \(a-1\) 的区间即可。假设 \(a\) 前面的最后一个 \(a-1\) 在 \(pre_{a-1}\) 处,后面的第一个 \(a\) 在 \(suf_a\) 处,后面的第一个 \(a-1\) 在 \(suf_{a-1}\) 处,则贡献即为 \((i-pre_{a-1})\times (\min(suf_a,suf_{a-1})-i)\)。

时间复杂度 \(O(n)\)。

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi=pair<int,int>;
int n,a[300005],tot[300005],pre[300005];
ll ans=0;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
memset(tot,0,sizeof(tot));
for(int i=1;i<=n;i++)
{
tot[a[i]]=i;
pre[i]=tot[a[i]-1];
}
fill(tot,tot+n+1,n+1);
for(int i=n;i>=1;i--)
{
int suf=min(tot[a[i]],tot[a[i]-1]);
ans+=1ll*(i-pre[i])*(suf-i);
tot[a[i]]=i;
}
cout<<ans;
return 0;
}

Atcoder ABC390F Double Sum 3 题解 [ 绿 ] [ 贡献思维 ] [ 计数 ]的更多相关文章

  1. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  2. 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

    [题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...

  3. AtCoder Grand Contest 039 简要题解

    从这里开始 比赛目录 Problem A Connection and Disconnection 简单讨论即可. Code #include <bits/stdc++.h> using ...

  4. AtCoder Grand Contest 021完整题解

    提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...

  5. AtCoder Grand Contest 040 简要题解

    从这里开始 比赛目录 A < B < E < D < C = F,心情简单.jpg. Problem A >< 把峰谷都设成 0. Code #include &l ...

  6. AtCoder ABC 129E Sum Equals Xor

    题目链接:https://atcoder.jp/contests/abc129/tasks/abc129_e 题目大意 给定一个二进制表示的数 L,问有多少对自然数 (a, b) 满足 $a + b ...

  7. 【ATcoder】Xor Sum 2

    题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\r ...

  8. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

  9. Whu 1603——Minimum Sum——————【单个元素贡献、滑窗】

    Problem 1603 - Minimum Sum Time Limit: 2000MS   Memory Limit: 65536KB   Total Submit: 623  Accepted: ...

  10. AtCoder Beginner Contest 089完整题解

    A - Grouping 2 Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement There a ...

随机推荐

  1. word操作类

    public class WordUtility { private _Application wordApp = null; private _Document wordDoc = null; pu ...

  2. PPT保存报错:某些字体无法与演示文稿一起保存

    WPS做的PPT,用的会员,高级的那种,很高大上很好看,但是用微软的PowerPoint编辑保存,报错:某些字体无法与演示文稿一起保存. 解决方案:移除嵌入的字体 打开演示文稿文件. 在"文 ...

  3. Qt通用方法及类库10

    函数名 //获取保存的文件 static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplic ...

  4. UML之包的导入与访问

    包是UML中管理元素的有效手段,UML中的所有元素均隶属于某一个包,即使你没有指定元素所属的包,这些元素也会被置于一个默认包中,包的本质是命名空间.当我们在一个包中需要访问另一个包中的元素时,可以使用 ...

  5. 2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。 请找出所有出现两次的数字,并计算它们的按位 XOR 值。 如果没

    2024-12-28:求出出现两次数字的 XOR 值.用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次. 请找出所有出现两次的数字,并计算它们的按位 XOR 值. 如果没 ...

  6. WorldWind源码剖析系列:漫游时四叉树瓦片类QuadTile的运行思路

    用户在窗口漫游时,需要加载精细的高程和纹理数据时的处理思路:当用户漫游时直到窗口相机的视场角的1/2小于(瓦片大小*瓦片绘制距离的乘积)时,才初始化四叉树瓦片类QuadTile,或者加载本地缓存中的数 ...

  7. 记一次cannot access its superinterface问题的的排查 → 强如Spring也一样写Bug

    开心一刻 昨天在幼儿园,领着儿子在办公室跟他班主任聊他的情况 班主任:皓瑟,你跟我聊天是不是紧张呀 儿子:是的,老师 班主任:不用紧张,我虽然是你的班主任,但我也才22岁,你就把我当成班上的女同学 班 ...

  8. API接口请求小结

    API接口请求小结 一.python: API接口请求 1.1 multipart/form-data类型请求 参数类型:数组 1.2 multipart/form-data类型请求 参数类型:文件流 ...

  9. 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报

    前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...

  10. Java后台管理框架的开源项目

    1.ThinkGem / JeeSite(开发人员/项目名称) JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您想学习Java平台的最佳学习案例,JeeSite还是接私活的最佳 ...