#define SYS
#ifdef SYS
#include "plants.h"
#endif // SYS
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=300010;
struct node{
int mx,l,r,best;
};
node t[N*4];
int w[N*4];
int a[N];
int p[N];
int nn,kk;
node Merge(node A,node B){
if (A.mx>B.mx) return A;
if (A.mx<B.mx) return B;
node C;
C.mx=A.mx;
C.l=A.l;
C.r=A.r;
if (A.best!=-1) C.best=A.best;
else if (B.best!=-1) C.best=B.best;
else if (B.l>=A.r+kk) C.best=B.l;
else C.best=-1;
return C;
}
void build(int v,int l,int r){
if (l>r) return;
w[v]=0;
if (l==r){
t[v].mx=a[l];
t[v].l=t[v].r=l;
t[v].best=-1;
return;
}
int m=(l+r)/2;
build(v+v,l,m);
build(v+v+1,m+1,r);
t[v]=Merge(t[v+v],t[v+v+1]);
}
void push(int v){
t[v+v].mx+=w[v];
t[v+v+1].mx+=w[v];
w[v+v]+=w[v];
w[v+v+1]+=w[v];
w[v]=0;
}
void upd(int v,int l,int r,int L,int R,int x){
if (l>R || r<L) return;
if (l>=L && r<=R){
t[v].mx+=x;
w[v]+=x;
return;
}
push(v);
int m=(l+r)/2;
upd(v+v,l,m,L,R,x);
upd(v+v+1,m+1,r,L,R,x);
t[v]=Merge(t[v+v],t[v+v+1]);
}
void add(int n,int l,int r,int x){
if (l<=r){
upd(1,0,n-1,l,r,x);
} else {
upd(1,0,n-1,l,n-1,x);
upd(1,0,n-1,0,r,x);
}
}
void init(int k, std::vector<int> r) {
int n=r.size();
nn=n;
kk=k;
for (int &i:r){
i=k-i-1;
}
for (int i=0;i<r.size();i++) a[i]=r[i];
build(1,0,n-1);
for (int cur=n;cur>=1;cur--){
int pos=(t[1].best==-1 ? t[1].l : t[1].best);
p[pos]=cur;
add(n,(pos-k+1+n)%n,pos,1);
add(n,pos,pos,-nn*3);
}
return;
}
int compare_plants(int x, int y) {
if (p[x]>p[y]) return 1;
if (p[x]<p[y]) return -1;
return 0;
}
#ifndef SYS
#include <cstdio>
#include <cassert>
#include <vector>
static int n, k, q;
static std::vector<int> r;
static std:: vector<int> x;
static std:: vector<int> y;
static std:: vector<int> answer;
int main() {
assert(scanf("%d%d%d", &n, &k, &q) == 3);
r.resize(n);
answer.resize(q);
for (int i = 0; i < n; i++) {
int value;
assert(scanf("%d", &value) == 1);
r[i] = value;
}
x.resize(q);
y.resize(q);
for (int i = 0; i < q; i++) {
assert(scanf("%d%d", &x[i], &y[i]) == 2);
}
fclose(stdin);
init(k, r);
for (int i = 0; i < q; i++) {
answer[i] = compare_plants(x[i], y[i]);
}
for (int i = 0; i < q; i++) {
printf("%d\n", answer[i]);
}
fclose(stdout);
return 0;
}
#endif
/*
4 3 2
0 1 1 2
0 2
1 2
*/
Compilation message
plants.cpp: In function 'void init(int, std::vector<int>)':
plants.cpp:81:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
81 | for (int i=0;i<r.size();i++) a[i]=r[i];
| ~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Correct |
0 ms |
384 KB |
Output is correct |
4 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
0 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
3 ms |
508 KB |
Output is correct |
7 |
Correct |
75 ms |
3576 KB |
Output is correct |
8 |
Correct |
2 ms |
384 KB |
Output is correct |
9 |
Correct |
3 ms |
512 KB |
Output is correct |
10 |
Correct |
82 ms |
3576 KB |
Output is correct |
11 |
Correct |
70 ms |
3452 KB |
Output is correct |
12 |
Correct |
71 ms |
3704 KB |
Output is correct |
13 |
Correct |
76 ms |
3704 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
0 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
3 ms |
508 KB |
Output is correct |
7 |
Correct |
75 ms |
3576 KB |
Output is correct |
8 |
Correct |
2 ms |
384 KB |
Output is correct |
9 |
Correct |
3 ms |
512 KB |
Output is correct |
10 |
Correct |
82 ms |
3576 KB |
Output is correct |
11 |
Correct |
70 ms |
3452 KB |
Output is correct |
12 |
Correct |
71 ms |
3704 KB |
Output is correct |
13 |
Correct |
76 ms |
3704 KB |
Output is correct |
14 |
Correct |
119 ms |
4856 KB |
Output is correct |
15 |
Correct |
501 ms |
16152 KB |
Output is correct |
16 |
Correct |
99 ms |
4856 KB |
Output is correct |
17 |
Correct |
506 ms |
16148 KB |
Output is correct |
18 |
Correct |
317 ms |
16120 KB |
Output is correct |
19 |
Correct |
316 ms |
16120 KB |
Output is correct |
20 |
Correct |
446 ms |
16120 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Incorrect |
70 ms |
3380 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Correct |
0 ms |
384 KB |
Output is correct |
4 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |