关注
楼上大佬单调栈解法太强了
能不能帮忙看看我的代码是否可行,应该是O(nlogn)的复杂度。
dp[i]表示 以i为结尾的子序列的最大值的和
const int maxn = 1e5+7;
typedef long long ll;
int pos[maxn];
int val[maxn*10];
ll dp[maxn*10];
int max_pos(int s, int e)
{
if(s > e) return -1;
if(s == e) return pos[s];
int mid = s + (e-s)/2;
int l = max_pos(s,mid);
int r = max_pos(mid+1,e);
return l > r ? l : r;
}
int main()
{
int n;
while(~scanf("%d",&n)) {
int mx = -1;
for(int i = 0;i < n;i ++) {
scanf("%d",val+i);
mx = max(mx,val[i]);
}
double sum = 0;
memset(pos,-1,sizeof(pos));
for(int i = 0;i < n;i ++) {
int p = max_pos(val[i]+1,mx);
pos[val[i]] = i;
if(p == -1) dp[i] = val[i] * 1LL * (i-p);
else dp[i] = dp[p] + val[i] * 1LL * (i-p);
sum += dp[i];
}
sum = 2*sum / ((n+1) * n);
printf("%.6lf\n",sum);
}
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
01-19 21:34
门头沟学院 测试开发 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 哪些公司开春招了? #
5208次浏览 94人参与
# 实习教会我的事 #
50353次浏览 390人参与
# 上班以后,你还有哪些坚持的爱好? #
4753次浏览 135人参与
# 为了实习逃课值吗? #
61550次浏览 516人参与
# 你都在哪些场所面过试? #
13013次浏览 183人参与
# 拼多多工作体验 #
43914次浏览 283人参与
# 工作压力大怎么缓解 #
135167次浏览 1197人参与
# AI coding的好用工具分享 #
11740次浏览 278人参与
# 实习怎么做才有更好的产出 #
7846次浏览 166人参与
# 找工作以来,你最看不惯__ #
7331次浏览 193人参与
# 实习生工资多少才算正常? #
8902次浏览 168人参与
# 你最近因为什么迷茫? #
24621次浏览 388人参与
# 实习离职怎么跟领导说 #
75158次浏览 418人参与
# 你给AI提过哪些离谱的需求? #
4079次浏览 139人参与
# 工作一周年分享 #
49495次浏览 251人参与
# 领导做过最不靠谱的事 #
8254次浏览 167人参与
# 牛客AI文生图 #
19161次浏览 225人参与
# xxx岗位的一天 #
41534次浏览 275人参与
# 实习学不到东西怎么办? #
270793次浏览 2491人参与
# 机械/制造每日一题 #
84416次浏览 1440人参与
查看7道真题和解析