社区讨论

求助代码

灌水区参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m4p5p9dj
此快照首次捕获于
2024/12/15 13:19
去年
此快照最后确认于
2025/11/04 12:48
4 个月前
查看原帖
题目描述 高大的萌兔老师俯视着大地。在极北之地,萌兔建立了一排柱子用来练习轻功, 这些柱子的高度并 不一定相同。
萌兔的轻功主要练习一次跳跃从一个柱子 i 到达相邻的另一个柱子 j 。但是刚开始练习轻功,萌兔老 师必须要保证 (i,j) 相邻,才能完成一次跳跃。
为了证明自己的轻功水平,在从一个柱子 i 到达相邻的另一个柱子 j 过程中,若 ai≥aj ,萌兔老师的心 理会受到 ai−aj 点伤害,反之她认为可以提升自己的轻功水平,心理不会受到伤害。
萌兔老师每天要进行 m 轮的轻功训练,现在她想知道,对于每轮轻功训练,从编号为 si 的柱子,依次跳 到编号为 ti 的柱子,她想知道她所受到的心理伤害值是多少 ?
输入格式 第一行两个整数n,m 分别表示柱子个数和询问个数
接下来 一行为 n 个数为ai(1≤ai≤109) 。
接下来 m 行第 j 行位 sj,tj 意味着萌兔从 sj 到 tj 。
注意 sj 可以大于tj 。
输出格式 m 行, 每行 1 个整数,表示答案。
样例 输入样例1 7 6 10 8 9 6 8 12 7 1 2 1 7 4 6 7 1 3 5 4 2 输出样例1 2 10 0 7 3 1
CPP
#include<bits/stdc++.h>
//#include<windows.h> bu yao bao
#define ll long long
using namespace std;
const int N = 1e6+5;
int n,m,a[N],s,t;
ll ans;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]); //cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&s,&t); //cin>>s>>t;
		if(s<t)
		{
			for(int j=s;j<t;j++)
			{
				if(a[j]>=a[j+1])
				{
					ans+=(a[j]-a[j+1]);
				}
			}
			cout<<ans<<'\n';
			//system("pause");
			ans=0;
			continue; 
		}
		else if(s>t)
		{
			for(int k=s;k>t;k--)
			{
				if(a[k]>=a[k-1])
				{
					ans+=(a[k]-a[k-1]);
				}
			}
			cout<<ans<<'\n';
			//system("pause");
			ans=0;
			continue; 
		}
		else if(s==t)
		{
			ans+=0;
			cout<<ans<<'\n';
			//system("pause");
			ans=0;
			continue; 
		}
	}
	return 0;
}
超时了,请问如何优化,急

回复

0 条回复,欢迎继续交流。

正在加载回复...