为什么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; }