#include "plants.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 2e5 + 10;
vector < int > g[maxn]; /// higher -> lower
vector < int > path;
int used[maxn];
void dfs(int beg)
{
used[beg] = 1;
for (auto nb: g[beg])
{
if(used[nb])continue;
dfs(nb);
}
path.pb(beg);
}
int hi[maxn];
int val[maxn];
void init(int k, std::vector<int> r)
{
int n = r.size();
if(k == 2)
{
int nxt = 0;
for (int i = 0; i < n; ++ i)
{
nxt = i + 1;
nxt %= n;
if(r[i] == 1)g[nxt].pb(i);
else g[i].pb(nxt);
}
}
else if(2*k > n)
{
int nxt = n - k;
for (int i = 0; i < n; ++ i)
{
if(r[i] > r[nxt])g[nxt].pb(i);
else if(r[i] < r[nxt])g[i].pb(nxt);
else cout << "greshno" << endl;
nxt ++;
nxt %= n;
}
}
for (int i = 0; i < n; ++ i)
{
for (auto lo: g[i])
hi[lo] = 1;
}
for (int i = 0; i < n; ++ i)
{
if(hi[i])continue;
dfs(i);
}
reverse(path.begin(), path.end());
int currv = n;
for (auto v: path)
{
currv --;
val[v] = currv;
}
return;
}
int compare_plants(int x, int y)
{
if(val[x] > val[y])return 1;
else return -1;
/* memset(used, 0, sizeof(used));
dfs(x);
if(used[y])return 1;
memset(used, 0, sizeof(used));
dfs(y);
if(used[x])return -1;
return 0;*/
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |