abc233_d Interval 题解
Count Interval
题意
给定
也就是问有多少对数
数据范围
思路
一看:子段和?那就考虑用前缀和优化。
一看数据范围:哦,不开long long
见祖宗。
手推一下。
假设
计算答案贡献:
那么问题来了,前缀和是有了,但怎样才能求出答案呢?桶是不可能的。
这时,我们就需要一个STL
容器了,他就是map
!
用map
去记录前面每个前缀和的数量就可以轻松地A了
时间复杂度
- 时间:
- 前缀和
,map
存储
- 前缀和
- 空间:
Code
点击查看代码
#include <iostream> #include <vector> #include <map> using namespace std; using ll = long long; // 记得开 long long const int N = 2e5 + 10; int n, a; ll k, sum[N], ans; map<ll, int> mp; // map 存储 int main(){ ios::sync_with_stdio(0), cin.tie(0); cin >> n >> k; mp[0] = 1; // 什么都不选也要记录 for (int i = 1; i <= n; i++) { cin >> a; sum[i] = sum[i - 1] + a; // 前缀和 } for (int i = 1; i <= n; i++) { ans += mp[sum[i] - k]; // 求答案 mp[sum[i]]++; // 记录 } cout << ans; return 0; }
本文作者:wnsyou の blog
本文链接:https://www.cnblogs.com/wnsyou-blog/p/17176278.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步