#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
const int M = 2e5 + 1;
pair<int,int> seg[M*2][2];
int lz[M*2][2], n, ty[M], ind[M], k;
void push(int v,int lc,int rc,int id)
{
	seg[lc][id].first+=lz[v][id], seg[rc][id].first+=lz[v][id];
	lz[lc][id]+=lz[v][id], lz[rc][id]+=lz[v][id];
	lz[v][id]=0;
}
pair<int,int> merge(pair<int,int> p,pair<int,int> p1)
{
	return (p.first<p1.first?p:p1);
}
void modify(int l,int r,int x,int id,int v=0,int s=0, int e=n)
{
	if (l>=e or r<=s) return;
	if (l<=s && e<=r)
	{
		seg[v][id].first+=x, lz[v][id]+=x;
		if (s+1==e) seg[v][id].second=s;
		return;
	}
	int mid=(s+e)/2, lc=v+1, rc=v+(mid-s)*2;
	push(v,lc,rc,id);
	modify(l,r,x,id,lc,s,mid);
	modify(l,r,x,id,rc,mid,e);
	seg[v][id]=merge(seg[lc][id], seg[rc][id]);
}
void init(int K, vector<int> r)
{
	n=r.size(), k=K;
	for (int i=0;i<2*n;i++)
		seg[i][0]=seg[i][1]={M*2,-1};
	queue<pair<int,int>> q;
	for (int i=0;i<n;i++)
	{
		modify(i,i+1,r[i],1), modify(i,i+1,k-1-r[i],0);
		if (!r[i]) q.push({i,1});
		else if(k-1==r[i]) q.push({i,0});
		ind[i]=M*2;
	}
	int c=0;
	while (!q.empty())
	{
		pair<int,int> pp=q.front();q.pop();
		int i=pp.first, t=pp.second;
		ty[i]=t, ind[i]=c++;
		int l=(i-k+1+n)%n, r=(i+k)%n;
		if (l<r)
			modify(l,r,-1,1-t);
		else
			modify(0,r,-1,1-t), modify(l,n,-1,1-t);
		modify(i,i+1,M*3,0);
		modify(i,i+1,M*3,1);
		pair<int,int> p=seg[0][0], p1=seg[0][1];
		if (!p.first)
			q.push({p.second,0});
		if (!p1.first)
			q.push({p1.second,1});
	}
	return;
}
int compare_plants(int x, int y)
{
	bool b=(x+k-1>=y);
	bool b1=(y+k-1-n>=x);
	if (b)
	{
		if (ind[x]<M && (!b1 or ind[x]<ind[y]))
		{
			if (ty[x]) return -1;
			else return 1;
		}
	}
	if (b1)
	{
		if (ind[y]<M && (!b or ind[y]<ind[x]))
		{
			if (ty[y]) return 1;
			else 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... |