Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long int
- #define vi vector<ll>
- using namespace std;
- int main() {
- int t;
- cin>>t;
- while(t--){
- ll n,m,k;
- cin>>n>>m>>k;
- if(k==0){
- ll ans=n+m-2;
- cout<<ans<<endl;
- continue;
- }
- vector<vector<ll>> v(k,vector<ll>(2));
- for(ll i=0;i<k;i++) cin>>v[i][0]>>v[i][1];
- sort(v.begin(),v.end());
- // for(auto i:v){
- // cout<<i[1]<<" ";
- // }
- // cout<<endl;
- vector<vi> arr;
- for(ll i=0;i<k;i++){
- if(v[i][0]!=n && v[i][1]!=m){
- arr.push_back(v[i]);
- }
- }
- // for(auto i:arr){
- // cout<<i[0]<<" "<<i[1]<<endl;
- // }
- ll l=arr.size();
- vector<ll> dp(l+1,LLONG_MAX);
- dp[0]=0;
- ll res=0;
- for(ll i=0;i<l;){
- ll z1=i;
- vector<vi> temp;
- while(i<l && arr[i][0]==arr[z1][0]){
- ll idx=upper_bound(dp.begin(),dp.end(),arr[i][1])-dp.begin();
- if(idx!=l+1 && dp[idx-1]<arr[i][1]){
- temp.push_back({idx,arr[i][1]});
- res=max(res,idx);
- }
- i++;
- }
- for(auto j:temp){
- // cout<<j[0]<<" "<<j[1]<<endl;
- dp[j[0]]=min(dp[j[0]],j[1]);
- }
- }
- ll ans=n+m-2-res;
- cout<<ans<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement