欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

牛客算法周周练15

发布时间:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 牛客算法周周练15 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

牛客算法周周练15

文章目录

    • A 数列下标
    • B 可持久化动态图上树状数组维护01背包
    • C 璀璨光滑
    • D 树上求和
    • E 算式子

A 数列下标

题意很明确,再看看数据,所以我们直接两重循环,用数组b来记录右边第一个大的数的下标
代码:

#include<bits/stdc++.h> typedef long long ll; using namespace std; ll a[10004]; ll b[10004]; int main() {int n;cin>>n;int cnt=0;for(int i=1;i<=n;i++){cin>>a[i];if(i==1)cnt=a[i];}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(a[j]>a[i]){b[i]=j;break;}}}for(int i=1;i<=n;i++){cout<<b[i]<<" ";}}

B 可持久化动态图上树状数组维护01背包

这名字太虎人了,吓得我一度不敢做
a可正可负,我们分类讨论
当a为正时,我们要让代价最小,最要让a尽可能在前面,所以从第一位顺着删就可以了
当a为负时,我们要让代价最小,其实就要让负的值最大,所以负的越往后越好,那我们就倒着删去就可以了
先删负数,最后只剩下正数,全部加上即可
本题和标题说的啥关系也没有
代码:

#include<bits/stdc++.h> typedef unsigned long long ull; typedef long long ll; using namespace std; const int maxn=1e6+99; ll a[maxn]; ll sum; bool w[maxn]; int main() {int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]<0)w[i]=0;else if(a[i])w[i]=1;}for(int i=1;i<=n;i++){if(w[i]==0)sum+=a[i]*i;}for(int i=1;i<=n;i++){if(w[i])sum+=a[i];}cout<<sum; }

C 璀璨光滑

D 树上求和

E 算式子

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的牛客算法周周练15的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。