10989 | 2024-05-02 16:44:00 | mraron | Siklóernyőzés | cpp17 | Elfogadva 100/100 | 1.228s | 93312 KiB |
#include<bits/stdc++.h>
using namespace std;
#define LOG(x) cerr<<(#x)<<" = "<<x<<"\n";
int n,q;
int a[200010];
int qL[200010], qR[200010];
void read() {
cin>>n>>q;
for(int i=0;i<n;++i) {
cin>>a[i];
}
for(int i=0;i<q;++i) {
cin>>qL[i]>>qR[i];
}
}
struct node {
int mx, lazy;
node *left,*right;
};
node* build(int L, int R) {
if(L==R){
return new node{0,0,nullptr,nullptr};
}else {
node* res=new node{0,0,build(L, (L+R)/2),build((L+R)/2+1, R)};
return res;
}
}
void push(node* root) {
if(root->lazy>0) {
root->mx+=root->lazy;
if(root->left!=nullptr) {
root->left->lazy+=root->lazy;
}
if(root->right!=nullptr) {
root->right->lazy+=root->lazy;
}
root->lazy=0;
}
}
void range_incr(node *root, int L, int R, int i, int j) {
push(root);
if(R<i || j<L) {
return ;
}
if(i<=L && R<=j) {
root->lazy++;
push(root);
return ;
}
range_incr(root->left, L, (L+R)/2, i, j);
range_incr(root->right, (L+R)/2+1, R, i, j);
root->mx=max(root->left->mx, root->right->mx);
return ;
}
int range_mx(node* root, int L, int R, int i, int j) {
push(root);
if(R<i || j<L) return 0;
if(i<=L && R<=j) return root->mx;
return max(range_mx(root->left, L, (L+R)/2, i, j), range_mx(root->right, (L+R)/2+1, R, i, j));
}
void debug(node* root) {
for(int i=0;i<n;++i) cerr<<range_mx(root, 0,n-1,i,i)<<" ";
cerr<<"\n";
}
void solve() {
stack<int, vector<int>> stL, stR;
a[n]=n+1;
vector<int> toLeft(n,n), toRight(n,n), L(n,-1), R(n,-1), par(n,-1);
for(int i=0, j=n-1;i<n;++i,j--) {
while(!stL.empty() && a[stL.top()]<a[i]) stL.pop();
while(!stR.empty() && a[stR.top()]<a[j]) stR.pop();
if(!stL.empty()) toLeft[i]=stL.top();
if(!stR.empty()) toRight[j]=stR.top();
stL.push(i);stR.push(j);
}
for(int i=0;i<n;++i) {
if(a[toLeft[i]]<a[toRight[i]]) par[i]=toLeft[i], R[toLeft[i]]=i;
else if(a[toLeft[i]]>a[toRight[i]]) par[i]=toRight[i], L[toRight[i]]=i;
}
vector<vector<int>> adj(200010);
int root;
for(int i=0;i<n;++i) {
if(par[i]>=0) adj[par[i]].push_back(i);
else root=i;
}
vector<vector<int>> dp(18, vector<int>(n));
vector<int> lvl(n), eL(n), eR(n); int ind=0;
auto dfs=[&](auto self, int x) -> void {
eL[x]=ind++;
sort(adj[x].begin(), adj[x].end());
for(int i:adj[x]) {
dp[0][i]=x;
lvl[i]=lvl[x]+1;
self(self, i);
}
eR[x]=ind-1;
};
dp[0][root]=root;
dfs(dfs, root);
for(int j=1;j<18;++j)
for(int i=0;i<n;++i) {
dp[j][i]=dp[j-1][dp[j-1][i]];
}
auto lca=[&](int x, int y) -> int {
if(lvl[x]>lvl[y]) swap(x,y);
if(lvl[y]>lvl[x]) {
for(int j=17;j>=0;j--) {
int py=dp[j][y];
if(lvl[py]>lvl[x]) y=py;
}
y=dp[0][y];
}
if(x==y) return y;
for(int j=17;j>=0;j--) {
int px=dp[j][x], py=dp[j][y];
if(px!=py) x=px, y=py;
}
return dp[0][x];
};
vector<int> qs(q), bal(q), jobb(q), mx_ind(q);
for(int i=0;i<q;++i) mx_ind[i]=lca(qL[i]-1, qR[i]-1);
iota(qs.begin(), qs.end(), 0);
auto tree=build(0,n-1);
sort(qs.begin(), qs.end(), [&](int x, int y) {
return qL[x]>qL[y];
});
for(int idx=0,j=n;idx<qs.size();++idx) {
int i=qs[idx];
while(j>=qL[i]) {
j--;
range_incr(tree, 0,n-1, eL[j], eR[j]);
}
if(L[mx_ind[i]]>=0) {
bal[i]=range_mx(tree, 0, n-1, eL[L[mx_ind[i]]], eR[L[mx_ind[i]]])-range_mx(tree, 0, n-1, eL[mx_ind[i]], eL[mx_ind[i]]);
}
}
sort(qs.begin(), qs.end(), [&](int x, int y) {
return qR[x]<qR[y];
});
tree=build(0,n-1);
for(int idx=0,j=0;idx<qs.size();++idx) {
int i=qs[idx];
while(j<qR[i]) {
range_incr(tree, 0,n-1, eL[j], eR[j]);
j++;
}
if(R[mx_ind[i]]>=0) {
jobb[i]=range_mx(tree, 0, n-1, eL[R[mx_ind[i]]], eR[R[mx_ind[i]]])-range_mx(tree, 0, n-1, eL[mx_ind[i]], eL[mx_ind[i]]);
}
}
for(int i=0;i<q;++i) {
cout<<max(bal[i],jobb[i])<<"\n";
}
}
int main() {
ios_base::sync_with_stdio(false);cin.tie(0);
read();
solve();
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 6ms | 5092 KiB | ||||
2 | Elfogadva | 1.085s | 64256 KiB | ||||
subtask2 | 5/5 | ||||||
3 | Elfogadva | 915ms | 93144 KiB | ||||
4 | Elfogadva | 874ms | 93312 KiB | ||||
5 | Elfogadva | 890ms | 89540 KiB | ||||
6 | Elfogadva | 792ms | 92844 KiB | ||||
7 | Elfogadva | 861ms | 84092 KiB | ||||
8 | Elfogadva | 619ms | 84580 KiB | ||||
subtask3 | 13/13 | ||||||
9 | Elfogadva | 8ms | 5732 KiB | ||||
10 | Elfogadva | 9ms | 5884 KiB | ||||
11 | Elfogadva | 8ms | 5936 KiB | ||||
12 | Elfogadva | 8ms | 5900 KiB | ||||
13 | Elfogadva | 9ms | 5860 KiB | ||||
14 | Elfogadva | 8ms | 5860 KiB | ||||
15 | Elfogadva | 8ms | 6116 KiB | ||||
16 | Elfogadva | 9ms | 6116 KiB | ||||
17 | Elfogadva | 8ms | 6136 KiB | ||||
subtask4 | 10/10 | ||||||
18 | Elfogadva | 8ms | 5732 KiB | ||||
19 | Elfogadva | 9ms | 5884 KiB | ||||
20 | Elfogadva | 8ms | 5936 KiB | ||||
21 | Elfogadva | 8ms | 5900 KiB | ||||
22 | Elfogadva | 9ms | 5860 KiB | ||||
23 | Elfogadva | 8ms | 5860 KiB | ||||
24 | Elfogadva | 8ms | 6116 KiB | ||||
25 | Elfogadva | 9ms | 6116 KiB | ||||
26 | Elfogadva | 8ms | 6136 KiB | ||||
27 | Elfogadva | 287ms | 56484 KiB | ||||
28 | Elfogadva | 273ms | 56532 KiB | ||||
29 | Elfogadva | 289ms | 56524 KiB | ||||
30 | Elfogadva | 291ms | 56520 KiB | ||||
31 | Elfogadva | 273ms | 56560 KiB | ||||
32 | Elfogadva | 273ms | 56552 KiB | ||||
33 | Elfogadva | 333ms | 71760 KiB | ||||
34 | Elfogadva | 331ms | 71724 KiB | ||||
35 | Elfogadva | 326ms | 63464 KiB | ||||
36 | Elfogadva | 344ms | 79820 KiB | ||||
subtask5 | 15/15 | ||||||
37 | Elfogadva | 8ms | 5732 KiB | ||||
38 | Elfogadva | 9ms | 5884 KiB | ||||
39 | Elfogadva | 8ms | 5936 KiB | ||||
40 | Elfogadva | 8ms | 5900 KiB | ||||
41 | Elfogadva | 9ms | 5860 KiB | ||||
42 | Elfogadva | 8ms | 5860 KiB | ||||
43 | Elfogadva | 8ms | 6116 KiB | ||||
44 | Elfogadva | 9ms | 6116 KiB | ||||
45 | Elfogadva | 8ms | 6136 KiB | ||||
46 | Elfogadva | 216ms | 13740 KiB | ||||
47 | Elfogadva | 216ms | 13720 KiB | ||||
48 | Elfogadva | 266ms | 13368 KiB | ||||
49 | Elfogadva | 252ms | 13412 KiB | ||||
50 | Elfogadva | 300ms | 13028 KiB | ||||
51 | Elfogadva | 300ms | 12996 KiB | ||||
52 | Elfogadva | 291ms | 13028 KiB | ||||
53 | Elfogadva | 294ms | 12944 KiB | ||||
54 | Elfogadva | 277ms | 13540 KiB | ||||
55 | Elfogadva | 268ms | 13348 KiB | ||||
56 | Elfogadva | 277ms | 13412 KiB | ||||
57 | Elfogadva | 286ms | 13284 KiB | ||||
subtask6 | 10/10 | ||||||
58 | Elfogadva | 630ms | 63488 KiB | ||||
59 | Elfogadva | 647ms | 63360 KiB | ||||
60 | Elfogadva | 628ms | 63500 KiB | ||||
61 | Elfogadva | 644ms | 63436 KiB | ||||
62 | Elfogadva | 633ms | 63548 KiB | ||||
63 | Elfogadva | 630ms | 63488 KiB | ||||
64 | Elfogadva | 602ms | 79476 KiB | ||||
65 | Elfogadva | 523ms | 76300 KiB | ||||
66 | Elfogadva | 508ms | 70228 KiB | ||||
67 | Elfogadva | 607ms | 84556 KiB | ||||
subtask7 | 11/11 | ||||||
68 | Elfogadva | 8ms | 5732 KiB | ||||
69 | Elfogadva | 9ms | 5884 KiB | ||||
70 | Elfogadva | 8ms | 5936 KiB | ||||
71 | Elfogadva | 8ms | 5900 KiB | ||||
72 | Elfogadva | 9ms | 5860 KiB | ||||
73 | Elfogadva | 8ms | 5860 KiB | ||||
74 | Elfogadva | 8ms | 6116 KiB | ||||
75 | Elfogadva | 9ms | 6116 KiB | ||||
76 | Elfogadva | 8ms | 6136 KiB | ||||
77 | Elfogadva | 287ms | 56484 KiB | ||||
78 | Elfogadva | 273ms | 56532 KiB | ||||
79 | Elfogadva | 289ms | 56524 KiB | ||||
80 | Elfogadva | 291ms | 56520 KiB | ||||
81 | Elfogadva | 273ms | 56560 KiB | ||||
82 | Elfogadva | 273ms | 56552 KiB | ||||
83 | Elfogadva | 333ms | 71760 KiB | ||||
84 | Elfogadva | 331ms | 71724 KiB | ||||
85 | Elfogadva | 326ms | 63464 KiB | ||||
86 | Elfogadva | 344ms | 79820 KiB | ||||
87 | Elfogadva | 630ms | 63488 KiB | ||||
88 | Elfogadva | 647ms | 63360 KiB | ||||
89 | Elfogadva | 628ms | 63500 KiB | ||||
90 | Elfogadva | 644ms | 63436 KiB | ||||
91 | Elfogadva | 633ms | 63548 KiB | ||||
92 | Elfogadva | 630ms | 63488 KiB | ||||
93 | Elfogadva | 602ms | 79476 KiB | ||||
94 | Elfogadva | 523ms | 76300 KiB | ||||
95 | Elfogadva | 508ms | 70228 KiB | ||||
96 | Elfogadva | 607ms | 84556 KiB | ||||
97 | Elfogadva | 652ms | 64324 KiB | ||||
98 | Elfogadva | 621ms | 64396 KiB | ||||
99 | Elfogadva | 629ms | 64376 KiB | ||||
100 | Elfogadva | 642ms | 64432 KiB | ||||
101 | Elfogadva | 638ms | 64344 KiB | ||||
102 | Elfogadva | 638ms | 64428 KiB | ||||
103 | Elfogadva | 708ms | 80484 KiB | ||||
104 | Elfogadva | 672ms | 74104 KiB | ||||
105 | Elfogadva | 689ms | 70604 KiB | ||||
106 | Elfogadva | 663ms | 81616 KiB | ||||
subtask8 | 21/21 | ||||||
107 | Elfogadva | 7ms | 5232 KiB | ||||
108 | Elfogadva | 955ms | 60628 KiB | ||||
109 | Elfogadva | 1.1s | 64312 KiB | ||||
110 | Elfogadva | 949ms | 64292 KiB | ||||
111 | Elfogadva | 1.087s | 64340 KiB | ||||
112 | Elfogadva | 902ms | 64340 KiB | ||||
113 | Elfogadva | 1.062s | 64332 KiB | ||||
114 | Elfogadva | 1.062s | 64256 KiB | ||||
115 | Elfogadva | 652ms | 63316 KiB | ||||
116 | Elfogadva | 602ms | 63420 KiB | ||||
117 | Elfogadva | 648ms | 63488 KiB | ||||
118 | Elfogadva | 629ms | 63444 KiB | ||||
119 | Elfogadva | 601ms | 63444 KiB | ||||
120 | Elfogadva | 621ms | 63444 KiB | ||||
121 | Elfogadva | 958ms | 64212 KiB | ||||
122 | Elfogadva | 871ms | 64256 KiB | ||||
subtask9 | 15/15 | ||||||
123 | Elfogadva | 7ms | 5232 KiB | ||||
124 | Elfogadva | 955ms | 60628 KiB | ||||
125 | Elfogadva | 915ms | 93144 KiB | ||||
126 | Elfogadva | 874ms | 93312 KiB | ||||
127 | Elfogadva | 890ms | 89540 KiB | ||||
128 | Elfogadva | 792ms | 92844 KiB | ||||
129 | Elfogadva | 861ms | 84092 KiB | ||||
130 | Elfogadva | 619ms | 84580 KiB | ||||
131 | Elfogadva | 8ms | 5732 KiB | ||||
132 | Elfogadva | 9ms | 5884 KiB | ||||
133 | Elfogadva | 8ms | 5936 KiB | ||||
134 | Elfogadva | 8ms | 5900 KiB | ||||
135 | Elfogadva | 9ms | 5860 KiB | ||||
136 | Elfogadva | 8ms | 5860 KiB | ||||
137 | Elfogadva | 8ms | 6116 KiB | ||||
138 | Elfogadva | 9ms | 6116 KiB | ||||
139 | Elfogadva | 8ms | 6136 KiB | ||||
140 | Elfogadva | 287ms | 56484 KiB | ||||
141 | Elfogadva | 273ms | 56532 KiB | ||||
142 | Elfogadva | 289ms | 56524 KiB | ||||
143 | Elfogadva | 291ms | 56520 KiB | ||||
144 | Elfogadva | 273ms | 56560 KiB | ||||
145 | Elfogadva | 273ms | 56552 KiB | ||||
146 | Elfogadva | 333ms | 71760 KiB | ||||
147 | Elfogadva | 331ms | 71724 KiB | ||||
148 | Elfogadva | 326ms | 63464 KiB | ||||
149 | Elfogadva | 344ms | 79820 KiB | ||||
150 | Elfogadva | 216ms | 13740 KiB | ||||
151 | Elfogadva | 216ms | 13720 KiB | ||||
152 | Elfogadva | 266ms | 13368 KiB | ||||
153 | Elfogadva | 252ms | 13412 KiB | ||||
154 | Elfogadva | 300ms | 13028 KiB | ||||
155 | Elfogadva | 300ms | 12996 KiB | ||||
156 | Elfogadva | 291ms | 13028 KiB | ||||
157 | Elfogadva | 294ms | 12944 KiB | ||||
158 | Elfogadva | 277ms | 13540 KiB | ||||
159 | Elfogadva | 268ms | 13348 KiB | ||||
160 | Elfogadva | 277ms | 13412 KiB | ||||
161 | Elfogadva | 286ms | 13284 KiB | ||||
162 | Elfogadva | 630ms | 63488 KiB | ||||
163 | Elfogadva | 647ms | 63360 KiB | ||||
164 | Elfogadva | 628ms | 63500 KiB | ||||
165 | Elfogadva | 644ms | 63436 KiB | ||||
166 | Elfogadva | 633ms | 63548 KiB | ||||
167 | Elfogadva | 630ms | 63488 KiB | ||||
168 | Elfogadva | 602ms | 79476 KiB | ||||
169 | Elfogadva | 523ms | 76300 KiB | ||||
170 | Elfogadva | 508ms | 70228 KiB | ||||
171 | Elfogadva | 607ms | 84556 KiB | ||||
172 | Elfogadva | 652ms | 64324 KiB | ||||
173 | Elfogadva | 621ms | 64396 KiB | ||||
174 | Elfogadva | 629ms | 64376 KiB | ||||
175 | Elfogadva | 642ms | 64432 KiB | ||||
176 | Elfogadva | 638ms | 64344 KiB | ||||
177 | Elfogadva | 638ms | 64428 KiB | ||||
178 | Elfogadva | 708ms | 80484 KiB | ||||
179 | Elfogadva | 672ms | 74104 KiB | ||||
180 | Elfogadva | 689ms | 70604 KiB | ||||
181 | Elfogadva | 663ms | 81616 KiB | ||||
182 | Elfogadva | 1.1s | 64312 KiB | ||||
183 | Elfogadva | 949ms | 64292 KiB | ||||
184 | Elfogadva | 1.087s | 64340 KiB | ||||
185 | Elfogadva | 902ms | 64340 KiB | ||||
186 | Elfogadva | 1.062s | 64332 KiB | ||||
187 | Elfogadva | 1.062s | 64256 KiB | ||||
188 | Elfogadva | 652ms | 63316 KiB | ||||
189 | Elfogadva | 602ms | 63420 KiB | ||||
190 | Elfogadva | 648ms | 63488 KiB | ||||
191 | Elfogadva | 629ms | 63444 KiB | ||||
192 | Elfogadva | 601ms | 63444 KiB | ||||
193 | Elfogadva | 621ms | 63444 KiB | ||||
194 | Elfogadva | 958ms | 64212 KiB | ||||
195 | Elfogadva | 871ms | 64256 KiB | ||||
196 | Elfogadva | 984ms | 80204 KiB | ||||
197 | Elfogadva | 1.148s | 80208 KiB | ||||
198 | Elfogadva | 1.059s | 79080 KiB | ||||
199 | Elfogadva | 1.052s | 72660 KiB | ||||
200 | Elfogadva | 1.087s | 72512 KiB | ||||
201 | Elfogadva | 1.218s | 70912 KiB | ||||
202 | Elfogadva | 1.008s | 68864 KiB | ||||
203 | Elfogadva | 1.228s | 68052 KiB | ||||
204 | Elfogadva | 1.116s | 67412 KiB | ||||
205 | Elfogadva | 970ms | 67156 KiB |