2 solutions

  • 1
    @ 2025-7-5 15:03:16
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n,vis,now;long long ans=0;
        cin>>n>>ans,vis=ans;
        for(int i=1;i<n;i++)cin>>now,ans+=max(now-vis,0),vis=now;
        cout<<ans;
    }
    • 1
      @ 2024-12-18 20:57:31

      luogu-P1969题解

      有部分思路来源于洛谷\color{#0E90D2}\text{洛谷}题解。

      主要题意

      有一排初始都为 00 ,长度为 nn 的数组,你可以每次选择一个区间 LL ~ RR ,将这部分全部增加 11 。希望最后在 nn 个数中,ai=hia_i = h_i

      解题思路

      如果 hi<hi+1h_i<h_{i+1} ,那么说明左边比右边要少,不能加到最大。于是,答案加上 hi+1hih_{i+1}-h_i

      如果hihi+1h_i\ge h_{i+1} ,那么满足左边时一定满足了右边,所以答案不变。

      上代码!

      #include <bits/stdc++.h>
      using namespace std;
      int n,a[100001],x=0,ans=0;
      int main(void)
      { 
          cin>>n;
          for(int i=1;i<=n;i++)
          {
              cin>>a[i];
              if(a[i]>x)
      			ans+=(a[i]-x);
              x=a[i];
          }
          cout<<ans;
          return 0;
      }
      
      
      • 1

      Information

      ID
      6022
      Time
      1000ms
      Memory
      125MiB
      Difficulty
      5
      Tags
      # Submissions
      21
      Accepted
      18
      Uploaded By