社区讨论
求助代码
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...