#include "plants.h"
#include <bits/stdc++.h>
using namespace std;
const int INF=1e9;
struct T{
int mn,pos;
}st[800001];
T operator +(T a, T b){
return (a.mn>b.mn?b:a);
}
int n,k,lazy[800001],p[200001],id;
vector <int> a;
void down(int node, int l, int r){
if (!lazy[node]||l==r)
return;
st[node<<1].mn+=lazy[node];
st[node<<1|1].mn+=lazy[node];
lazy[node<<1]+=lazy[node];
lazy[node<<1|1]+=lazy[node];
lazy[node]=0;
}
void build(int node, int l, int r){
if (l==r){
st[node]={a[l],l};
return;
}
int mid=(l+r)>>1;
build(node<<1,l,mid);
build(node<<1|1,mid+1,r);
st[node]=st[node<<1]+st[node<<1|1];
}
void update(int node, int l, int r, int u, int v, int val){
if (l>v||r<u||u>v)
return;
if (l>=u&&r<=v){
st[node].mn+=val;
lazy[node]+=val;
return;
}
down(node,l,r);
int mid=(l+r)>>1;
update(node<<1,l,mid,u,v,val);
update(node<<1|1,mid+1,r,u,v,val);
st[node]=st[node<<1]+st[node<<1|1];
}
T get(int node, int l, int r, int u, int v){
if (l>v||r<u||u>v)
return {INF,0};
if (l>=u&&r<=v)
return st[node];
down(node,l,r);
int mid=(l+r)>>1;
return get(node<<1,l,mid,u,v)+get(node<<1|1,mid+1,r,u,v);
}
int calc(int j){
T t={INF,0};
if (j<k)
t=get(1,0,n-1,0,j-1)+get(1,0,n-1,n+j-k+1,n-1);
else
t=get(1,0,n-1,j-k+1,j-1);
if (t.mn)
return -1;
return t.pos;
}
void dfs(int i){
while (calc(i)!=-1)
dfs(calc(i));
p[i]=id;
id--;
if (i<k){
update(1,0,n-1,0,i-1,-1);
update(1,0,n-1,n+i-k+1,n-1,-1);
}
else
update(1,0,n-1,i-k+1,i-1,-1);
update(1,0,n-1,i,i,INF);
}
void init(int K, vector <int> r){
k=K;
a=r;
n=id=a.size();
build(1,0,n-1);
while (!st[1].mn)
dfs(st[1].pos);
}
int compare_plants(int x, int y){
return (p[x]>p[y]?1:(p[x]<p[y]?-1:0));
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2488 KB |
Output is correct |
2 |
Correct |
0 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2504 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
2 ms |
2396 KB |
Output is correct |
7 |
Correct |
53 ms |
7284 KB |
Output is correct |
8 |
Correct |
2 ms |
2396 KB |
Output is correct |
9 |
Correct |
3 ms |
2392 KB |
Output is correct |
10 |
Correct |
52 ms |
7252 KB |
Output is correct |
11 |
Correct |
46 ms |
7232 KB |
Output is correct |
12 |
Correct |
44 ms |
7440 KB |
Output is correct |
13 |
Correct |
59 ms |
7376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2488 KB |
Output is correct |
2 |
Correct |
0 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2504 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
1 ms |
2396 KB |
Output is correct |
6 |
Correct |
2 ms |
2396 KB |
Output is correct |
7 |
Correct |
53 ms |
7284 KB |
Output is correct |
8 |
Correct |
2 ms |
2396 KB |
Output is correct |
9 |
Correct |
3 ms |
2392 KB |
Output is correct |
10 |
Correct |
52 ms |
7252 KB |
Output is correct |
11 |
Correct |
46 ms |
7232 KB |
Output is correct |
12 |
Correct |
44 ms |
7440 KB |
Output is correct |
13 |
Correct |
59 ms |
7376 KB |
Output is correct |
14 |
Correct |
75 ms |
10068 KB |
Output is correct |
15 |
Correct |
460 ms |
17244 KB |
Output is correct |
16 |
Correct |
74 ms |
9956 KB |
Output is correct |
17 |
Correct |
441 ms |
17236 KB |
Output is correct |
18 |
Correct |
287 ms |
17168 KB |
Output is correct |
19 |
Correct |
287 ms |
17140 KB |
Output is correct |
20 |
Correct |
434 ms |
17388 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
44 ms |
6860 KB |
Output is correct |
4 |
Correct |
248 ms |
16616 KB |
Output is correct |
5 |
Correct |
288 ms |
16480 KB |
Output is correct |
6 |
Correct |
428 ms |
16748 KB |
Output is correct |
7 |
Correct |
472 ms |
17004 KB |
Output is correct |
8 |
Correct |
445 ms |
17204 KB |
Output is correct |
9 |
Correct |
255 ms |
16588 KB |
Output is correct |
10 |
Correct |
254 ms |
16528 KB |
Output is correct |
11 |
Correct |
205 ms |
15844 KB |
Output is correct |
12 |
Correct |
252 ms |
16528 KB |
Output is correct |
13 |
Correct |
291 ms |
16564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Incorrect |
1 ms |
2396 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |