【补题】 Codeforces Round 1039 (Div. 2) D. Sum of LDS
题意:给一个排列,问排列种全部的连续子串,将他们的最长非递减子序列大小加起来,答案是多少,题中给出了一个特殊条件
参考题解:Codeforces Round 1039 (Div. 2)个人题解 - 知乎
思路:
1.惊人的注意到这个条件,其实就是在意思你,如果有一个非递减的地方,那么就是跳过它。
2.那么只要统计每一个数字对结果的贡献即可,如果出现了非递减,那么它的贡献就是只有它自己,减去即可
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=1e6+5;
const int MOD=1e9+7;
const int INF=1e18;void solve(){int n;cin >> n;vector<int> ve(n);for(int i=0;i<n;i++){cin >> ve[i];}int ans=0;for(int i=0;i<n;i++){ans+=(i+1)*(n-i);if(i<n-1 && ve[i+1]>ve[i]){ans-=(i+1)*(n-i-1);}}cout << ans << '\n';}signed main(){IOS;int t=1;cin >> t;while(t--){solve();}
}
