Advertisement
Patrickmeme

Codat

Mar 12th, 2023
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #include <fstream>
  2.  
  3. using namespace std;
  4. ifstream cin("codat.in");
  5. ofstream cout("codat.out");
  6. #define MAXN 1000000
  7. int v[MAXN],st[MAXN],poz[MAXN];
  8. int raspsp[MAXN];
  9. int raspdp[MAXN];
  10. int main()
  11. {
  12.     int n,i,capat;
  13.     cin>>n;
  14.     for(i=0;i<n;i++){
  15.         cin>>v[i];
  16.     }
  17.     ///stanga
  18.     poz[0]=0;
  19.     capat=0;
  20.     raspsp[0]=-1;
  21.     for(i=1;i<n;i++){
  22.         if(st[capat]>v[i]){
  23.             raspsp[i]=poz[capat];
  24.             st[capat+1]=v[i];
  25.             poz[capat+1]=i;
  26.             capat++;
  27.         }else{
  28.             while(capat>=0 && st[capat]<=v[i]){
  29.                 capat--;
  30.             }
  31.             if(capat==-1){
  32.                 st[0]=v[i];
  33.                 poz[0]=i;
  34.                 capat=0;
  35.                 raspsp[i]=-1;
  36.             }else{
  37.                 raspsp[i]=poz[capat];
  38.                 st[capat+1]=v[i];
  39.                 poz[capat+1]=i;
  40.                 capat++;
  41.             }
  42.         }
  43.     }
  44.     ///dr
  45.     st[0]=v[n-1];
  46.     poz[0]=n-1;
  47.     raspdp[n-1]=-1;
  48.     capat=0;
  49.     for(i=n-2;i>=0;i--){
  50.         if(st[capat]>v[i]){
  51.             raspdp[i]=poz[capat];
  52.             st[capat+1]=v[i];
  53.             poz[capat+1]=i;
  54.             capat++;
  55.         }else{
  56.             while(capat>=0 && st[capat]<=v[i]){
  57.                 capat--;
  58.             }
  59.             if(capat==-1){
  60.                 st[0]=v[i];
  61.                 poz[0]=i;
  62.                 capat=0;
  63.                 raspdp[i]=-1;
  64.             }else{
  65.                 raspdp[i]=poz[capat];
  66.                 st[capat+1]=v[i];
  67.                 poz[capat+1]=i;
  68.                 capat++;
  69.             }
  70.         }
  71.     }
  72.     for(i=0;i<n;i++){
  73.         if(raspdp[i]==-1 && raspsp[i]==-1)
  74.             cout<<"-1 ";
  75.         else if(raspdp[i]==-1){
  76.             cout<<raspsp[i]+1<<" ";
  77.         }else if(raspsp[i]==-1){
  78.             cout<<raspdp[i]+1<<" ";
  79.         }else if(raspdp[i]-i<=i-raspsp[i]){
  80.             cout<<raspdp[i]+1<<" ";
  81.         }else{
  82.             cout<<raspsp[i]+1<<" ";
  83.         }
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement