Advertisement
Guest User

jungla

a guest
Apr 8th, 2020
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #include <iostream>
  2. #define lim 1000005
  3. using namespace std;
  4.  
  5. int v[lim],ans[lim],stiva[lim],st[lim],dr[lim];
  6.  
  7. int  main()
  8. {
  9.     int n,cerinta;
  10.     cin>>cerinta;
  11.     if(cerinta==1)
  12.     {   //aflam brut cate elemente dinaintea lui v[i] sunt mai mici decat v[i]
  13.         int q;
  14.         cin>>n>>q;
  15.         for(int i=1; i<=n; ++i)
  16.         {
  17.             int a;
  18.             cin>>v[i];
  19.             a=0;
  20.             int maxx=0;
  21.             for(int j=i-1; j; --j)
  22.             {
  23.                 if(v[j] < v[i]) ++a;
  24.             }
  25.             ans[i]=a;
  26.         }
  27.         for(int i=1; i<=q; ++i)
  28.         {
  29.             int nr;
  30.             cin>>nr;
  31.             cout<<ans[nr]<<'\n';
  32.         }
  33.     }
  34.     else
  35.     {
  36.         int height=0,vf=0;
  37.         //height reprezinta valoarea maxima din vectorul v,iar vf reprezinta varful stivei
  38.         cin>>n;
  39.         int a;
  40.         for(int i=1; i<=n; ++i)
  41.         {
  42.             cin>>a;
  43.             v[i]=a;
  44.             height=max(height,v[i]);
  45.             while(vf && v[i] > v[stiva[vf]])
  46.             {
  47.                 dr[stiva[vf]]=i;
  48.                 --vf;
  49.             }
  50.             stiva[++vf]=i;
  51.         }
  52.         for(int i=1; i<=vf; ++i)
  53.             dr[stiva[i]]=n+1;
  54.         vf=0;
  55.         for(int i=n; i; --i)
  56.         {
  57.             while(vf&&v[i]>v[stiva[vf]])
  58.             {
  59.                 st[stiva[vf]]=i;
  60.                 --vf;
  61.             }
  62.             stiva[++vf]=i;
  63.         }
  64.         long long s,maxs=0;
  65.         for(int i=1; i<=n; ++i)
  66.         {
  67.             int leftlim=st[i]+1,rightlim=dr[i]-1;
  68.             s=(rightlim-leftlim+1)*(height-v[i]);
  69.             maxs=max(s,maxs);
  70.            // if(maxs)
  71.                 //cout<<height-v[i]<<" "<<s;
  72.         }
  73.         cout<<maxs;
  74.     }
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement