【算法】找规律(听说还有写RMQ的www)
【题解】ans+=(a[i]-a[i-1]) (i=1...n)(a[i]>a[i-1])
后面比前面大k,说明要新叠加k个区间来达到所需高度。(看似很复杂的区间覆盖问题,从前往后扫描就很容易得到贪心策略)
#include<cstdio> int n,ans,a[100010]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]>a[i-1])ans+=(a[i]-a[i-1]); } printf("%d",ans); return 0; }
顺便一提,通过差分将区间操作化为两个单点操作也是常见套路。