为什么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;
}
查看8道真题和解析