生活随笔
收集整理的这篇文章主要介绍了
牛客算法周周练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的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。