greedy two pointers *1300

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
#include <time.h>
using namespace std;

#define vi vector<int>
#define f(i,a,b) for(int i=a;i<b;i++)
const int N= 1e5+5;
#define int long long
const int mod= 1e9+7;



signed main(){
ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
clock_t start=clock();
int tc=1;
cin>>tc;
 while(tc--){

   //logic:   for x,y,z. Chooose middle "y", iff diff(x,y)+diff(y,z)> diff(x,z)
    
   int n;cin>>n;
   vi arr(n),isPeak(n,0);
   f(i,0,n) cin>>arr[i];

   vector<int>ans;
   ans.push_back(arr[0]);// arr[0], always be the part
   ans.push_back(arr[1]);// need to check

   for(int i=2;i<n;i++){

    int size=ans.size();

    if(size<=1){
      ans.push_back(arr[i]);
      continue;
    }

    int x=ans[size-2],y=ans[size-1],z=arr[i];

    if(abs(x-y)+abs(y-z)<=abs(x-z))
      ans.pop_back();
    ans.push_back(z);  
   }

   cout<<ans.size()<<endl; 
   for(auto e:ans)
    cout<<e<<" ";

   cout<<endl; 
    

}
clock_t end=clock();
// double secs = double(end - start) / CLOCKS_PER_SEC;cerr << "\n\nTime elapsed : " << secs<<"s";
    return 0;
}


Comments

Submit
0 Comments
More Questions

1486B - Eastern Exhibition
1363A - Odd Selection
131B - Opposites Attract
490C - Hacking Cypher
158B - Taxi
41C - Email address
1373D - Maximum Sum on Even Positions
1574C - Slay the Dragon
621A - Wet Shark and Odd and Even
1395A - Boboniu Likes to Color Balls
1637C - Andrew and Stones
1334B - Middle Class
260C - Balls and Boxes
1554A - Cherry
11B - Jumping Jack
716A - Crazy Computer
644A - Parliament of Berland
1657C - Bracket Sequence Deletion
1657B - XY Sequence
1009A - Game Shopping
1657A - Integer Moves
230B - T-primes
630A - Again Twenty Five
1234D - Distinct Characters Queries
1183A - Nearest Interesting Number
1009E - Intercity Travelling
1637B - MEX and Array
224A - Parallelepiped
964A - Splits
1615A - Closing The Gap