题目传送门
题意翻译
给你一组n的排列,记为
A
i
A_i
Ai,问存在多少对L,R,满足
(
∑
i
=
L
R
A
i
)
=
n
(sumlimits_{i=L}^R A_i)=n
(i=L∑RAi)=n
说明
1
≤
N
≤
100
,
000
1 leq N leq 100,000
1 ≤ N ≤ 100,000
思路:
看到求和
有些人就开始暴力了
于是老朋友(祖宗)都来了------WA,TLE,RE…
于是转念一想:用前缀和来做
那这么做呢?
假设我要求
L
R
LR
LR的和
那么我就可以拿sum[R]-sum[L] (sum数组代表前缀和)
CODE:
#includeusing namespace std; #define int long long int n,a[100010],sum[100010],ans; signed main() { scanf("%lld",&n); for(int i=1; i<=n; i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];//求前缀和 for(int i=0; i n) break;//和已经大于n了,再加值就更大了 printf("%lldn",ans); return 0; }



