题意
算出所有单调的子数组。
我的思路
可以发现子数组数与子数组长度的关系:1个数字为1,2个数字为1+2,3个数字为1+2+3,...,n个数字为1+2+...+n。这个数组可以通过打表得到。
代码
#include<bits/stdc++.h> using namespace std; #define ll long long int main() { int n,count=1,a,b; ll sum=0; ll arry[100001]; cin>>n; for(int i=1;i<=n;i++) sum+=i,arry[i]=sum;//打表 sum=0; cin>>a; while(--n){ cin>>b; if(b>=a) count++;//子数组长度的计算,开始为1,递增则加1. else{//单调递增断开的情况。 sum += arry[count]; count = 1; } } if(b>=a) sum+=arry[count]; cout<<sum; return 0; }
疑惑
我在本地运行示例1结果正确,提交为不完全正确,也没有说正确了几例,让我小小的脑袋里有大大的疑惑。纯菜鸟,没有描述的太好,希望有大佬看到能指点一二。