传送门

  • 题目:
  • 思路:
    枚举右端点,统计有多少个左端点和当前右端点组成的区间不是good,总数记为cntcntcnt。

    • 对于一个确定的区间[l,r][l,r][l,r],如果sum[r]=sum[l−1]sum[r]=sum[l-1]sum[r]=sum[l−1],那么该区间内元素和为0,sum[]sum[]sum[]表示前缀和。

    • 统计sum[r]sum[r]sum[r]最新出现的位置pospospos:

      • 如果sum[r]sum[r]sum[r]未出现过,那么不存在lll,使得[l,r][l,r][l,r]的区间和为0,当前rrr对答案的贡献即上一个rrr对答案的贡献。
      • 如果sum[r]sum[r]sum[r]出现过,那么[pos+1,r][pos+1,r][pos+1,r]内的区间和为0,且对于l≤pos,[l,r]l≤pos,[l,r]l≤pos,[l,r]都是不是good。注意,可能出现[pos+1,r][pos+1,r][pos+1,r]内某个子区间和为0,且该子区间的左边界为LLL,那么更新L=max(L,pos+1)L=max(L,pos+1)L=max(L,pos+1),当前rrr对答案的贡献为LLL
    • ans=n∗(n+1)2−cntans=\frac{n*(n+1)}{2}-cntans=2n∗(n+1)​−cnt

  • ac代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
const int maxn = 2e5+10;
int n;
ll  cnt[maxn];
map<ll, int> last;
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d", &n);ll x, sum = 0, ans = 0;int left0 = 0;last[0] = 0;for(int i = 1; i <= n; i++){scanf("%lld", &x);sum += x;if(!last.count(sum)) cnt[i] = cnt[i-1];else{left0 = max(left0, last[sum]+1);cnt[i] = left0;}last[sum] = i;ans += cnt[i];}printf("%lld\n", 1ll*n*(n+1)/2-ans);return 0;
}
/*
5
2 3 0 1 -4
8
2 3 0 1 2 1 -3 -4*/

【CF1333C】Eugene and an array(子区间计数)相关推荐

  1. Codeforces Round #632 (Div. 2) C. Eugene and an array 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给定一个长度为nnn的序列aaa,定义一段区间为好区间是这段区间的所有连续子区间的和都不为000,求好区间的个数. 思路: 套路题,定义aia_iai​的前缀 ...

  2. CodeForces - 1333C Eugene and an array(尺取)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数组 a,抛出 good 数组的定义: good 数组为数组 a 的一个子数组 good 数组的任意子数组之和均不为 0 (注意区分子数组和子数列的 ...

  3. java最全基础知识_Java编程入门,计数排序(Counting Sort)怎么做?

    计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数. 计数排序(Counting sort)是一种稳定的排 ...

  4. c ++递归算法数的计数_计数排序算法–在C / C ++中实现的想法

    c ++递归算法数的计数 What is the counting sort algorithm? In Computer Science, sorting algorithms form the b ...

  5. 算法导论读书笔记(8)

    算法导论读书笔记(8) 目录 计数排序 计数排序的简单Java实现 基数排序 基数排序的简单Java实现 桶排序 计数排序 计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 ...

  6. 程序员必备十大排序算法

    程序员必备十大排序算法 常见排序算法 基本概念 插入排序 直接插入排序 排序思路 排序过程 代码实现 算法分析 折半插入排序 排序思路 排序过程 代码实现 算法分析 希尔排序 排序思路 排序过程 代码 ...

  7. Codeforces Round #632 (Div. 2) C和D和F

    C. Eugene and an array 题目大意就是说给你以1个数组,数组内连续的子序列的子序列中如果没有一个和为0则这就是好序列,求所有的好序列数量 解题思路:总的子串数量为(n + 1) n ...

  8. 时间复杂度O(n),空间复杂度O(1)的排序

    题目描述: 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) 解析: 利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,然后遍历n个数,假 ...

  9. PHP数据结构算法实例

    来源:http://blog.sina.com.cn/s/blog_788fd8560100plj3.html PHP已经面世十几年了,数据结构更是数倍于PHP生龄,但很不理解的是语言界竟无一人出版使 ...

  10. 面向程序员编程——精研排序算法

    这篇文章很长,我花了好久的时间(中间公司出了bug,加班了好几天( ¯ ¨̯ ¯̥̥ ))进行整理,如有任何疑问,欢迎随时留言. 关键字:排序算法,时间复杂度,空间复杂度 排序就是研究如何将一系列数据 ...

最新文章

  1. java 发送邮件
  2. xml gridview控件增删改查_Mybatis之XML如何映射到方法
  3. linux ucontext 类型,协程:posix::ucontext用户级线程实现原理分析 | WalkerTalking
  4. html json解析插件,jQuery插件jsonview展示json数据
  5. Minimum grid
  6. BigDecimal丢失精度的坑
  7. leetcode49. 字母异位词分组
  8. Linux whoami命令、Linux su命令、Linux w命令
  9. JS:ES10新特性
  10. 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
  11. 程序运行时被用户删除了工作目录后崩溃
  12. xjad java反编译工具使用
  13. 基于 WebGL 3D 的 HTML5档案馆可视化管理系统
  14. 得物数据抓取+参数加密解析
  15. 源代码管理工具——VSS详解
  16. python中怎么计数_python怎么实现计数?
  17. navicat哪个版本支持mysql8_Navicat连接MySQL8.0亲测有效
  18. AdGuard推荐设置
  19. 使用uniapp注册全局组件
  20. [附源码]JAVA+ssm计算机毕业设计高校体育馆管理信息系统(程序+Lw)

热门文章

  1. gentoo今天收获记录[原创]
  2. 蓝桥杯 BASIC-9 特殊回文数
  3. logitech鼠标接收器配对
  4. ediplus 复制编辑一列_Editplus 部分使用技巧(一)
  5. arcgis构建金字塔失败什么原因_新西兰创业移民转永居失败!原因是什么?
  6. 能编写PHP语言吗_语言能力差口才不好,靠看书就能提高吗
  7. linux使用中的问题 ---(Cannot find a valid baseurl for repo: base)
  8. 正则表达式 四则运算 java_利用正则表达式判断四则运算表达式是否合法
  9. 对比了解Grafana与Kibana的关键差异
  10. win7x64 连接oracle 客户端 vs 2010调试 提示“ORA-12154: TNS: 无法解析指定的连接标识符 ”