第十五屆中北大學算法與程序設計競賽(公開賽)K.籤個到

第十五屆中北大學算法與程序設計競賽(公開賽)K.籤個到

題目鏈接

題目描述

給定 n\ n 個正整數:a1,a2...an1,ana_1,a_2...a_{n-1},a_n ,每次操作可以選擇數組中任意一個數加上或減去其下標。(即 ai=ai+ia_i=a_i+iai=aiia_i=a_i-i )
 m\ m 次操作後,數組中最大值與最小值的差最大可能是多少。
(數組下標從1開始)

輸入描述:

第一行輸入整數 n\ n m\ m(1<=n<=100000,0<=m<=100000)(1<=n<=100000,0<=m<=100000)
接下來一行輸入 n\ n 個整數,第 i\ i 個數代表 aia_i(100000<=ai<=100000)(-100000<=a_i<=100000)

輸出描述:

輸出一個整數,表示執行完所有操作後最大值和最小值的差可能的最大值。

示例1

輸入

2 1
2 1

輸出

3

題目不難,只要遍歷一遍記錄變化後的最大最小值即可,有一個坑點就是 n=1n=1 時,答案始終爲0,AC代碼如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
 
main(){
    ll n,m;
    cin>>n>>m;
    ll a[n+1];
    ll mn=1e18,mx=-1e18,MN=1e18,MX=-1e18;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
        mn=min(mn,a[i]-m*i);
        mx=max(mx,a[i]+m*i);
        MN=min(MN,a[i]);
        MX=max(MX,a[i]);
    }
    if(n==1) {puts("0");exit(0);}
    cout<<max(mx-MN,MX-mn)<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章