#include "plants.h"
#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define f0r(i,n) for(int i = 0; i<n; i++)
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int,int>
#define vb vector<bool>
#define vout(v) for(auto u : v)cout<<u<<' '; cout<<'\n';
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<'\n';
using namespace std;
int n;
vi v;
int k;
vi ps;
int sum(int l, int r){
	// dout2(l,r);
	int thing, len;
	if(l <= r){
		thing = ps[r+1] - ps[l];
		len = r - l + 1;
	}
	else{
		//sum from r + 1 to l - 1
		thing = ps[n] - (ps[l] - ps[r+1]);
		len = n - (l - r - 1);
	}
	// dout2(thing,len);
	if(thing == len)return 1;
	if(thing == 0)return 0;
	return -1;
}
vi ans;
void init(int k, std::vector<int> r) {
	v = r;
	n = r.size();
	::k=k;
	if(k == 2){
		ps.resize(n+1);
		FOR(i, 1, n+1){
			ps[i] = ps[i-1] + r[i-1];
		}
	}
	else{
		ans.resize(n);
		f0r(i,n){
			vi zp;
			f0r(j, n){
				if(r[j] == 0)zp.pb(j);
			}
			int nxt;
			if(zp.size() == 1)nxt = zp[0];
			else{
				f0r(j, zp.size()){
					int prev = (j == 0) ? zp.back() : zp[j-1];
					int dist = (j == 0) ? zp[0] + n - prev : zp[j] - prev;
					if(dist > k)nxt = zp[j];
				}
			}
			
			r[nxt] = -1;
			ans[nxt] = n - i;
			for(int j = nxt-1; j >= nxt - k; j--){
				int x = j;
				if(x < 0)x += n;
				r[x]--;
			}
			
		}
	}
	
}
int compare_plants(int x, int y) {
	//path from x to y is all 1, means y is taller, return -1
	if(k == 2){
		int rhs = (x == 0) ? n-1 : x-1;
		if(sum(x, y-1) == 1){
			return -1;
		}
		else if(sum(x, y-1) == 0){
			return 1;
		}
		else if(sum(y, rhs) == 1){
			return 1;
		}
		else if(sum(y, rhs) == 0){
			return -1;
		}
		else return 0;
	}
	else{
		if(ans[x] > ans[y])return 1;
		else return -1;
	}
	
}
| # | 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... |