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. Python消息队列之Huey

    缘起: 之前在Python中使用最多的就是Celery, 同样的在这次项目中使用了Celery+eventlet的方式,但是由于具体执行的逻辑是使用的异步编写的, 当时就出现了一个问题,当使用http ...

  2. MySQL之使用pt-online-schema-change在线修改大表结构

    原因: 最近公司上一个功能, 需要为其中某个表中新增字段,但是考虑到线上数据已经达到300w+的级别,同时使用的mysql的版本是5.7而非8.0,这会导致新增字段的时候,对全表进行加锁,直到添加完毕 ...

  3. ClickHouse之基础使用

    [安装] [YUM] 1.添加官方存储库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://packag ...

  4. MySQL底层概述—6.索引原理

    大纲 1.索引原理 2.二叉查找树 3.平衡二叉树(AVL树) 4.红黑树 5.B-Tree 6.B+Tree 7.Hash索引 8.聚簇索引与非聚簇索引 1.索引原理 索引会在数据文件中(ibd文件 ...

  5. Uniapp input的v-model问题

    前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app. 坑位 最近在做一个input ...

  6. 用nginx正向代理,让内网主机通过外网主机访问外网

    需求1:某几个ip的代理 server { listen 9000; # 监听端口 server_name localhost; set $url "proxy_server_doman_o ...

  7. python读取pdf

    1. vscode 安装python插件 2. vscode 终端安装pdfminer.six , pdfplumber python -m pip install pdfminer.six pyth ...

  8. 08C++选择结构(2)

    一.逻辑变量 教学视频 存储类似灯亮或灯灭.是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量. 逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真) ...

  9. Dart代码混淆

    Dart代码混淆 代码混淆是修改应用程序的二进制文件以使其更难被人类理解的过程.混淆会在编译后的 Dart 代码中隐藏函数和类名称,将每个符号替换为另一个符号. Flutter 的代码混淆仅适用于re ...

  10. ng-alain: st 简化表格

    https://github.com/ng-alain/delon/blob/master/packages/abc/st/index.zh-CN.md st 并不是在创造另一个表格组件,而是在 nz ...