为什么E题nlognlogn过不了

感觉挺极限可以过的,为什么过不了,是我的常数大吗?(我交了好几次一样的,分数都不一样,看评测机心情)

#include<bits/stdc++.h>

using namespace std;

const int maxn = 200010;
int a[maxn],sum[maxn];
map<int,vector<int> > m;
vector<int> pos;

int main()
{
	int n;
	cin>>n;
	int cnt = 0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i] > 0)	pos.push_back(i);
		cnt += a[i];
	}
	
	if(cnt % 3 != 0 || pos.size() < 3){cout<<0<<endl;return 0;}
	
	sum[1] = a[1];
	
	for(int i=2;i<=n;i++)
		sum[i] = sum[i-1] + a[i];
	
	for(int i=1;i<n-1;i++)
		m[sum[i]].push_back(i);
	
	int ans = 0;
	for(int i=n;i>1;i--){
		int num = sum[n] - sum[i-1];
		if(m.count(num) == 1){
			for(int it : m[num]){
				int num2 = sum[i-1] - sum[it];
				auto a1 = lower_bound(pos.begin(),pos.end(),1);
				auto a2 = lower_bound(pos.begin(),pos.end(),it+1);
				auto a3 = lower_bound(pos.begin(),pos.end(),i);
				if(num2 == num && a1 != pos.end() && a2 != pos.end() && a3 != pos.end()){
					if(*a1 <= it && *a2 <= i-1 && *a3 <= n)		ans ++;
				}
			}
		}
	}
	
	cout<<ans<<endl;
	return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务