当前位置:首页 > 题解目录 > 正文内容

【题解】前缀最小值

亿万年的星光3年前 (2022-10-18)题解目录1738

【题目描述】

求一个数列的所有前缀最小值之和。
即:给出长度为n的数列a[i],求出对于所有1<=i<=n,min(a[1],a[2],...,a[i])的和。
由于读入较大,数列由随机种子生成。
其中a[1]=x,a[i]=(379*a[i-1]+131)%997。

【输入描述】

一行两个正整数n,x,分别表示数列的长度和随机种子。(n<=100000,x<997)

【输出描述】

一行一个正整数表示该数列的前缀最小值之和。

【样例输入】

5 666

【样例输出】

1650

【提示】

数列为{666,304,692,188,596},前缀最小值为{666,304,304,188,188},和为1650。


前缀最小:

比如,有数列:666 304 692 188 596,前缀最大值为:666,304,304,188,188,和为1650。
对于每个位置的前缀最小值解释如下:对于第1个数666,只有一个数,一定最大;对于第2个数,求出前两个数的最小数,还是304;对于第3个数,求出前3个数的最小数是304……其余位置依次类推,最后求前缀最小值得和。


【参考代码】

#include<bits/stdc++.h>
using namespace std;
int a[100001]; 
int main(){
	int n,x,i,mi,s=0;
	cin>>n>>x;
	mi = a[1] = x;
	for(i=2;i<=n;i++){
		a[i]=(379*a[i-1]+131)%997;
	}
	for(i=1;i<=n;i++){
		mi = min(mi,a[i]);
		s +=  mi;
	}
	cout<<s;
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 动态规划
分享给朋友:

相关文章

【题解】跳格子2

【题目描述】地面上有一排长度为n的格子1-n,每个格子上都有一个数xi,开始时你在位置0,每次你可以向前跳1-2格,然后取走格子上的数,直到跳到位置n+1。取走的数的和就是你的得分,现在你想知道你可能...

【题解】循环比赛日程表

【题解】循环比赛日程表

【题目描述】设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。【输入描述】输入:M。【输出描述】输出:...

【题解】大整数加法

【题目描述】求两个不超过200位的非负整数的和。【输入】有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。【输出】一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么...

【题解】寻找祖先

【题解】寻找祖先

【题目描述】给出充足的父子关系,请你编写程序找到某个人的最早的祖先。规定每个人的名字都没有空格,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不...

【题解】种花问题

【题目描述】假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,...

【题解】给定和为定数

【题目描述】给出若干个整数,询问其中是否有一对数的和等于给定的数。【输入描述】第一行是整数n(0 < n ≤ 100,000),表示有n个整数。第二行是n个整数。整数的范围是在0到108之间。第...