This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define x first
#define y second
#define all(v) v.begin(), v.end()
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<ll, ll> p;
struct asdf{
int a, b, c;
asdf(int a = 0, int b = 0, int c = 0) : a(a), b(b), c(c) {}
bool operator < (const asdf &t) const {
if(a != t.a) return a < t.a;
if(b != t.b) return b < t.b;
return c < t.c;
}
};
int k, n;
int arr[4][202020];
vector<asdf> tmp;
vector<p> v;
set<p> st[202020];
int solve(){
int ans = 0;
for(int i=0; i<n; i++){
int l = 1, r = ans + 1;
while(l < r){
int m = l + r >> 1;
auto it = st[m].lower_bound(v[i]);
if(it == st[m].begin()) r = m;
else{
if(prev(it)->y < v[i].y) l = m + 1;
else r = m;
}
}
ans = max(ans, l);
auto it = st[l].insert(v[i]).first;
it++;
while(it != st[l].end() && it->y >= v[i].y){
auto tmp = it; it++;
st[l].erase(tmp);
}
}
return ans;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> k >> n;
for(int i=1; i<=3; i++) for(int j=1; j<=n; j++){
if(k < i) arr[i][j] = arr[i-1][j];
else cin >> arr[i][j];
}
for(int i=1; i<=n; i++) tmp.pb({arr[1][i], arr[2][i], arr[3][i]});
sort(all(tmp));
for(auto &i : tmp) v.pb({i.b, i.c});
cout << solve();
}
Compilation message (stderr)
matrix.cpp: In function 'int solve()':
matrix.cpp:32:23: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int m = l + r >> 1;
~~^~~
# | 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... |