zoukankan      html  css  js  c++  java
  • 【题解】CF1426D Non-zero Segments

    题目戳我

    ( ext{Solution:})

    ([l,r])子段和是(0,)(sum[r]=sum[l-1].)

    于是我们可以考虑维护当前哪一个前缀和出现过。对于区间([l,r])若其子段和为(0)则在(r-1)的地方插入一个(+infty)即可。

    初始化要把(0)赋值为出现过。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[500010];
    map<long long,bool>mp;
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
    	mp[0]=true;
    	long long s=0;
    	int ans=0;
    	for(int i=1;i<=n;++i){
    		s+=a[i];
    		if(mp[s]){
    			ans++;
    			mp.clear();
    			mp[0]=true;
    			s=a[i];
    		}
    		mp[s]=true;
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    ```cpp
  • 相关阅读:
    8月10日
    8月9日
    8月8日
    8月7日
    8月6日
    8月5日
    《大道至简》读后感
    8月4日
    8月3日
    8月2日
  • 原文地址:https://www.cnblogs.com/h-lka/p/13759321.html
Copyright © 2011-2022 走看看