2 条题解
-
1
验题人做法:
考虑另外开一个数组记录原数组从小到大排序后的值,接着我们遍历原数组,找到第一个大于等于这个数在新数组里的位置,然后直接 就是答案了。
时间复杂度
#include <bits/stdc++.h> using u32 = unsigned; using i64 = long long; using u64 = unsigned long long; using i128 = __int128; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin >> n; std::vector<int> a(n), b(n); for (int i = 0; i < n; i++) { std::cin >> a[i]; b[i] = a[i]; } sort(b.begin(), b.end()); for (int i = 0; i < n; i++) { std::cout << n - (std::lower_bound(b.begin(), b.end(), a[i]) - b.begin()) << '\n'; } return 0; }
-
1
由于一个积木只能放在比他小或相等的上面,通过贪心思想,将积木按长度排序后,对相同长度取个高度最大值,然后按输入数据依次输出答案即可。
inline void solve() { int n; cin>>n; vector<int>w(n+3),rem(n+3); map<int,int>ma; for(int i=1;i<=n;i++) { cin>>rem[i]; w[i]=rem[i]; } sort(&w[1],&w[n+1]); for(int i=1;i<=n;i++) { ma[w[i]]=max(ma[w[i]],n-i+1); } for(int i=1;i<=n;i++) { cout<<ma[rem[i]]<<"\n"; } }
- 1
信息
- ID
- 53
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 55
- 已通过
- 13
- 上传者