南昌理工ACM集训队
:这次的题目有点梦回高考题,看上去很难但是一看题解就会做了,考了许多思维题,对数学的要求也有点大
.
.
.
第八届“图灵杯”NEUQ-ACM程序设计竞赛
.
.
.
C.上进的凡凡
.
这题要求要找到不递减的子数组有多少个,其实就可以找到每一段的递增数列的有多少个然后再去计算和
for(long long i=1;i<n;i++)
{
if(a[i+1]>=a[i]) con[j]++;
else j++;
}
用 j 做指针,con数组记入每一段的长度
for(long long i=1;i<=j;i++) sum+=(con[i]+1)*(con[i])/2;
之后直接用等差数列的公式进行计算每个con的值就行
.
.
完整代码
#include <iostream>
using namespace std;
const int N=100010;
long long a[N],con[N];
int main()
{
long long n;
cin>>n;
for(long long i=1;i<=n;i++) cin>>a[i],con[i]=1;
long long j=1;
for(long long i=1;i<n;i++)
{
if(a[i+1]>=a[i]) con[j]++;
else j++;
}
unsigned long long sum=0;
for(long long i=1;i<=j;i++) sum+=(con[i]+1)*(con[i])/2;
cout<<sum;
}
平平无奇的签到题罢了
.
.