#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define sp << ' ' <<
#define nl << '\n'
const int INF = 2e9;
struct SegmentTree{
vector<int> a; int sz = 1;
SegmentTree(int n){
while(sz < n) sz += sz;
a.assign(2*sz, -INF);
}
void update(int i, int v, int x, int lx, int rx){
if(rx-lx==1) return void(a[x] = v);
int mx = (lx + rx) / 2;
if(i < mx) update(i, v, 2*x+1, lx, mx);
else update(i, v, 2*x+2, mx, rx);
a[x] = max(a[2*x+1], a[2*x+2]);
}
void update(int i, int v){ update(i, v, 0, 0, sz); }
int firstGreater(int v, int x, int lx, int rx){
if(rx-lx==1) return lx;
int mx = (lx + rx) / 2;
if(a[2*x+1] > v) return firstGreater(v, 2*x+1, lx, mx);
else return firstGreater(v, 2*x+2, mx, rx);
}
int firstGreater(int v){ return firstGreater(v, 0, 0, sz); }
};
signed main(){
cin.tie(0)->sync_with_stdio(0);
int n; cin >> n;
int l[n], r[n], k = n;
vector<int> s;
for(int i=0; i<n; ++i) cin >> l[i] >> r[i];
SegmentTree st(n+1);
for(int i=n-1; i>=0; --i){
int j = min(n, st.firstGreater(-l[i]));
st.update(i, -r[i]);
r[i] = j - i;
while(!s.empty() and l[s.back()] <= l[i]) s.pop_back();
if(!s.empty() && s.back() < j) r[i] = r[s.back()] + (int)s.back() - i;
s.push_back(i);
}
cout << *max_element(r, r+n);
}
Compilation message
tem.cpp: In function 'int main()':
tem.cpp:35:18: warning: unused variable 'k' [-Wunused-variable]
35 | int l[n], r[n], k = n;
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
588 KB |
Output is correct |
2 |
Correct |
5 ms |
624 KB |
Output is correct |
3 |
Correct |
5 ms |
588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
189 ms |
8784 KB |
Output is correct |
2 |
Correct |
212 ms |
9272 KB |
Output is correct |
3 |
Correct |
240 ms |
14220 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
371 ms |
16136 KB |
Output is correct |
2 |
Correct |
367 ms |
15616 KB |
Output is correct |
3 |
Correct |
373 ms |
26188 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
391 ms |
16620 KB |
Output is correct |
2 |
Correct |
377 ms |
15892 KB |
Output is correct |
3 |
Correct |
445 ms |
31376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
466 ms |
16672 KB |
Output is correct |
2 |
Correct |
418 ms |
15944 KB |
Output is correct |
3 |
Runtime error |
535 ms |
36688 KB |
Memory limit exceeded |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
412 ms |
14804 KB |
Output is correct |
2 |
Correct |
372 ms |
15944 KB |
Output is correct |
3 |
Correct |
394 ms |
26588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
356 ms |
15768 KB |
Output is correct |
2 |
Correct |
335 ms |
16020 KB |
Output is correct |
3 |
Correct |
345 ms |
15908 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
324 ms |
15300 KB |
Output is correct |
2 |
Correct |
339 ms |
16036 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
367 ms |
16068 KB |
Output is correct |
2 |
Correct |
495 ms |
16020 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
358 ms |
16024 KB |
Output is correct |
2 |
Correct |
481 ms |
15180 KB |
Output is correct |