Codeforces Round #632 (Div. 2) C. Eugene and an array (map&前綴和)

Codeforces Round #632 (Div. 2) C. Eugene and an array (map&前綴和)

題目傳送門

題意:求給定數組所有區間和非0的區間個數。

思路:

在這裏插入圖片描述
在這裏插入圖片描述
AC代碼:

#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
map<ll,ll>mp;
ll n,sum,mx,ans;//mx滿足(前一個區間)[idx,i-1]==0和[idx,i]==0的最大idx 
int main(){
	mp[0]=1;//初始化保證第一個前綴和[1,i]爲0的右端i的非0區間個數爲i-1 
	cin>>n;
	for(int i=1,x;i<=n;i++){
		cin>>x,sum+=x;
		mx=max(mx,mp[sum]);
		ans+=i-mx;
		mp[sum]=i+1;
	}
	cout<<ans<<endl;
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章