[USACO14DEC] Marathon G
发布人:shili8
发布时间:2025-02-28 05:57
阅读次数:0
**Marathon G**
**USACO14DEC**
**题目描述**
在一个名为"Marathon"的城市里,住着n个人,每个人都有自己的跑步速度。每个人都想成为最快的人,但他们也希望能和朋友一起比赛。如果一个人比另一个人快,那么他就可以超越这个人并且获得更好的排名。
现在,我们需要计算出所有可能的排名顺序,并且输出每个人的排名。
**输入**
* n:代表城市里有多少个人* p:代表每个人跑步速度(从1到n)
**输出**
* 每个人的排名**代码示例**
cpp#include <iostream> #include <vector> using namespace std; const int N =100000 +10; typedef long long ll; int n, m, k, T; ll a[N], b[N]; void solve() { cin >> n; vector<ll> p(n +1); for (int i =1; i <= n; ++i) { cin >> p[i]; } vector<int> ans(n +1); int cnt =0; for (int i =1; i <= n; ++i) { if (!ans[i]) { ll mx =0; for (int j = i; j <= n && !ans[j]; ++j) { mx = max(mx, p[j]); ans[j] = cnt +1; } cnt++; } } for (int i =1; i <= n; ++i) { cout << ans[i] << " "; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T =1; while (T--) { solve(); } return0; }
**注释**
* 本题目主要涉及到的是计算出所有可能的排名顺序,并且输出每个人的排名。
* 我们首先需要读入n和p,然后使用一个vector来存储ans。
* 然后,我们使用一个循环来遍历从1到n的数字,如果这个数字对应的值为0,那么我们就开始计算mx并且更新ans。
* 最后,我们输出每个人的排名。
**时间复杂度**
* 时间复杂度为O(n),因为我们需要读入n和p,然后使用一个循环来遍历从1到n的数字。
**空间复杂度**
* 空间复杂度为O(n),因为我们需要使用一个vector来存储ans。