前缀和数组是十分基本和简单的一种工具,但是要想真正用好,却不容易。在平时的训练中有很多的问题都要用到前缀和。我们通过一个小的例子来看一下

cogs1190最大和

题目大意:N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和。

思路:一看到这个题,竟然想到了线段树,后来发现有点大材小用,要是深究的话也不是很会写,于是就另辟蹊径。这个题目中有一个神奇的关系就是这是个环,于是我们就有了两种情况:1)这一段数本身就在给定区间内;2)这一段数被分放在给定区间的两端。第一种情况比较好处理,只用前缀和,跟新最小值和最大的差就可以了;后一种情况就要用到后缀和,找到最大值和后缀和的和取最大。输出最大值就可以了。

#include<iostream>
#include<cstdio>
using namespace std;
int sum1[100001]={0},sum2[100001]={0},a[100001]={0};
int main()
{freopen("maxsum.in","r",stdin);freopen("maxsum.out","w",stdout);int n,i,j,maxn,minn;maxn=-2100000000;scanf("%d",&n);for (i=1;i<=n;++i){scanf("%d",&a[i]);sum1[i]=sum1[i-1]+a[i];}for (i=n;i>=1;--i)sum2[i]=sum2[i+1]+a[i];minn=2100000000;for (i=1;i<=n;++i){if (sum1[i]-minn>maxn) maxn=sum1[i]-minn;if (sum1[i]<minn) minn=sum1[i];    }minn=-2100000000;for (i=1;i<=n;++i){if (minn+sum2[i]>maxn) maxn=minn+sum2[i];if (sum1[i]>minn) minn=sum1[i];}printf("%d\n",maxn);fclose(stdin);fclose(stdout);
}

View Code

这样一道题目中展现了前缀和的特殊魅力,以后还要多加练习,熟练应用。

现在才知道,这个二级前缀和数组好像是一种高端的东西,差分序列。

cogs1435金发姑娘和N头牛

题目大意:取一种温度,让牛能产出最多的奶。已知每头牛最适合的温度和在这个温度区间上中下不同的产奶量。

思路:先离散化,然后扫一遍所有的ai、bi,然后在0、ai、bi+1(一开始写成了bi,竟然过了75分。。。)处加上相应的值、在ai、bi+1、maxn减去相应的值,最后从头到尾扫一遍前缀和数组,最大值就是答案了。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[20001]={0},b[20001]={0},cc[80001]={0},sum[100000]={0},dd[100000]={0};
int main()
{freopen("milktemp.in","r",stdin);freopen("milktemp.out","w",stdout);int maxn=0,n,i,j,x,y,z,tot=0,size,ans=0;scanf("%d%d%d%d",&n,&x,&y,&z);for (i=1;i<=n;++i){scanf("%d%d",&a[i],&b[i]);++tot;cc[tot]=a[i];++tot;cc[tot]=b[i];}sort(cc+1,cc+tot+1);size=unique(cc+1,cc+tot+1)-cc-1;for (i=1;i<=n;++i){a[i]=upper_bound(cc+1,cc+size+1,a[i])-cc-1;b[i]=upper_bound(cc+1,cc+size+1,b[i])-cc-1;maxn=max(maxn,max(a[i],b[i]));}maxn+=2;for (i=1;i<=n;++i){dd[0]+=x;dd[a[i]]-=x;dd[a[i]]+=y;dd[b[i]+1]-=y;dd[b[i]+1]+=z;dd[maxn]-=z;}ans=sum[0]=dd[0];for (i=1;i<=maxn;++i){sum[i]=sum[i-1]+dd[i];ans=max(ans,sum[i]);}printf("%d\n",ans);fclose(stdin);fclose(stdout);
}

View Code

转载于:https://www.cnblogs.com/Rivendell/p/4141406.html

前缀和?or差分序列?相关推荐

  1. 【CS 1373】射命丸文(二维前缀和)

    emmmm又是一个东方人物[好吧这不是重点],下面的前缀和和二维前缀和才是23333 去寻找偷拍记者吧 题目描述 Description 在幻想乡,射命丸文是以偷拍闻名的鸦天狗.当然,文文的照相机可不 ...

  2. 洛谷 U41571 Agent2

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  3. 基本算法之前缀和与差分的是使用

    前缀和与差分 前缀和 鸣谢 二维前缀和 激光炸弹 差分 求差分 差分求区间修改 增减序列 最高的牛 前缀和 鸣谢 添加链接描述 和 添加链接描述 二维前缀和 激光炸弹 题目链接 解题思路: 解法思路: ...

  4. 前缀和与差分的使用(新手快速入门)

    前缀和 前缀和定义:s[0]=0; s[i]=s[i-1]+a[i]; 其中s[i]数组为a[i]数组的前缀和: 有了前缀和后,给定一个区间 [l,r] 的和就可以表示为: sum=s[r] -s[l ...

  5. 基本算法——前缀和与差分

    一.前缀和 一维前缀和 顾名思义,不再赘述. #include <iostream> #include <cstdio> #include <algorithm> ...

  6. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)

    1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...

  7. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  8. Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)

    1. 示例 1 package main import ("context""fmt""go.etcd.io/etcd/clientv3"& ...

  9. LeetCode简单题之检查字符串是否为数组前缀

    题目 给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 . 字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的 ...

最新文章

  1. Docker容器启动自动化脚本(五)
  2. Hibernate读书笔记---继承映射
  3. 第十课:栈的表示与实现
  4. vs code 开发企业级python_入股不亏!VS Code中最好用的Python扩展插件
  5. anaconda 更改路径_一文教你如何运用Anaconda帮助Python编程
  6. wordpress编辑插件_如何使用Tabify编辑屏幕插件减少WordPress帖子编辑器屏幕的拥挤
  7. 中国邮政支付宝卡通开通流程
  8. 再见收费的 XShell,我改用国产良心工具,完全免费!
  9. JDBC05 ResultSet结果集
  10. Atitit mybatis业务流程配置化管理总结 目录 1. Mybatis 1 2. 流程模型常见的bpm模式 1 2.1. 活动task 流程,getway流程控制(分支跳转 循环等) 1 3
  11. ios12完美深色模式插件_苹果针对老机型推送iOS12.4.6iOS14代码泄漏iPhone12:无刘海真全面屏...
  12. ztree学习笔记(一)
  13. android接口和type c对比,USB Type-C究竟比3.5mm音频接口好在哪里?
  14. IT领域常用指标概述
  15. Java是什么?Java能干嘛?
  16. Dynamics CRM 365 - 零基础入门学习后端插件的注册方法
  17. 360,一场阴谋的制造者
  18. ios app 通过扫码下载ipa自动安装应用
  19. Stimulsoft Reports.JS 2021.3.6 Crack
  20. ms全国计算机考试网,全国计算机等级考试一级ms office考试试题

热门文章

  1. python下载安装教程3.8.0-windows中安装Python3.8.0的实现方法
  2. python自学路线-自学python编程的方法路线
  3. python软件怎么运行-python软件怎么用
  4. python3爬虫实例-自己动手,丰衣足食!Python3网络爬虫实战案例
  5. python文件可以用什么软件打开-py文件用什么可以打开.
  6. python必背内容-初学Python必背手册
  7. 从零开始学python数据分析-从零开始学Python数据分析(视频教学版)
  8. 自学python有哪些方向-Python新手入门应该注意的一些问题以及学习方向
  9. python语言if语句-Python在if语句中等同于(logical-and)
  10. linux与python客户端,《使用python进行unix和linux管理》§5网络 §5.1 网络客户端