题意:给你个数组b,要你要求出来他所能构造的另外一个数组的和,构造条件是用b数组里的数并且b数组里的下标差要等于b数组里值的差,并且必须得是上升序列
思路:
把公式转换一下即可:i-j=bi-bj 并且i>j,交换一下i-bi=j-bj,所以我去数组里找下标和值差中和最多的值输出,注意为负的情况,开longlong
#include<bits/stdc++.h> using namespace std; #define int long long const int maxn=2e5+100; int b[maxn]; signed main() { int n,i,j,t; cin>>n; map<int ,int >m1; for(i=1;i<=n;i++) { cin>>b[i]; m1[b[i]-i]+=b[i]; } int ans=0; for(auto x:m1) { ans=max(ans,x.second); } cout<<ans<<endl; return 0; }