当前位置: 首页 > news >正文

CF Yamakasi (前缀和+双指针)

https://codeforces.com/contest/2121/problem/F

思路:这道题是在求子段和为s的个数问题上增加了子段的最大值得为x的条件

           如果单纯地要我们计算子段和为s的个数那怎么求呢,首先子段和快速求解得用到前缀和,所以我们可以得到式子pre[r]-pre[l]=s,即区间[l+1,r]满足和为s,我们可以通过计算l<r中满足pre[l]=pre[r]-s的左端点个数,从而得到以r为右端点的子段和为s的个数,这样我们只需要O(n)的时间就可以得到整个数组满足子段和为s的个数。

          但题目增加了子段中的最大值必须为x的限制,因为pre[r]-pre[l]=s,所以在[l+1,r]的区间中必须含有x,而l一定在x的左边,只有当碰到新的x时l才能向右移动计数,或者碰到比x大的数l直接等于这个更大的数的位置,直到碰到x才进行更新。同时我们要对该区间x是否为最大值进行标记,只有当区间最大值为x时才能对答案进行加pre[r]-s个数的操作。

Code:

void solve()
{int n,s,x;cin>>n>>s>>x;vector<int> v(n+1),pre(n+1,0);for(int i=1;i<=n;i++){cin>>v[i];pre[i]=pre[i-1]+v[i];}map<int,int> mp;int cnt=0;bool st=false;int l=0;for(int i=1;i<=n;i++){if(v[i]==x){st=true;while(l<i) mp[pre[l++]]++;}if(v[i]>x){st=false;l=i;mp.clear();}if(st) cnt+=mp[pre[i]-s];}cout<<cnt<<endl;
}

http://www.dtcms.com/a/419116.html

相关文章:

  • 机器学习-第三章 线性模型
  • 新手想做网站赚钱app制作开发公司怎么收费
  • 现代Web存储技术(二):存储容量规划与传统方案对比
  • PyTorch实战(8)——图像描述生成
  • App Store 上架完整流程解析,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 测试与苹果审核经验
  • stm32和Zynq的中断抢占机制
  • iOS App 混淆实战,在源码不可用情况下的成品加固与测试流程
  • Python爬虫技术:招标信息抓取与关键词过滤 (1)
  • 莞城网站推广wordpress图片并列排
  • 塘厦仿做网站wordpress和jwplayer
  • 嵌入式 - 内核驱动3 - class/device | misc | ioctl |device/driver
  • Matlab通过GUI实现点云的双边(Bilateral)滤波(附最简版)
  • 4-5〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸远程文件包含漏洞
  • 怎么在淘宝上做网站中交建设集团网站
  • 在线查看网站源码中国最新新闻
  • 轴状态读取(运动控制系列)
  • quic的拥塞控制
  • 【模型系列】Human-in-the-Loop
  • AI项目问题总结大全
  • 【linux内核驱动day03】
  • Accelerate基本使用
  • Day75 基本情报技术者 单词表10 ネットワーク応用
  • 企业网站美化做常州美食网站首页的背景图
  • 网站建设设计的流程wordpress的搭建教程 pdf
  • 页网站腾讯云学生机做网站
  • C++ 模板(Template)基础与应用
  • Flask实战指南:从基础到高阶的完整开发流程
  • I2C总线详解
  • 从底层到应用:开散列哈希表与_map/_set 的完整实现(附逐行注释)
  • MoonBit 异步网络库发布