概述
题目描述
对于一个n个数的序列 a1,a2,⋯,an,从小到大排序之后为ap1,ap2,⋯,apn,定义它的 bx 值为满足 api≠api−1+1,1<i≤n 的 i 的个数。
给定 n 个数的一个排列,你需要计算它所有连续子序列的 bx 值之和。
输入格式
输入第一行包括一个正整数 T,表示数据组数。
对于每组数据,第一行一个整数 n,第二行 n 个整数,表示 n 个数的一个排列。
1≤T≤20
1≤n≤100000
1≤ai≤n
输出格式
对每组数据输出一个整数表示答案。
样例数据
输入
2 3 1 2 3 4 3 1 4 2
输出
0 5
# include <bits/stdc++.h>
# define ll long long
using namespace std;
const int maxn = 1e5;
ll a[maxn+3];
int c[maxn+3];
int main()
{
int t, n;
scanf("%d",&t);
while(t--)
{
ll ans = 0;
scanf("%d",&n);
for(int i=1; i<=n; ++i)
{
scanf("%d",&a[i]);
c[a[i]] = i;
ans += (ll)(n-i+1)*(i-1);
}
for(int i=1; i<n; ++i)
{
int l = c[i], r = c[i+1];
if(l > r) swap(l, r);
ans -= (ll)l*(n-r+1);
}
printf("%lldn",ans);
}
return 0;
}
最后
以上就是苗条大象为你收集整理的SCUT校赛129:笔芯值(数学)的全部内容,希望文章能够帮你解决SCUT校赛129:笔芯值(数学)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复