Advertisement
Guest User

Untitled

a guest
May 20th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <utility>
  5. #include <set>
  6. #include <string>
  7. #include<map>
  8. #include <vector>
  9.  
  10. #define pb push_back
  11. #define mp make_pair
  12.  
  13. using namespace std;
  14.  
  15. int t,n;
  16. long long dp[100010];
  17. int kuda[100010];
  18. bool uzo[100010];
  19. long long a[100010];
  20.  
  21. int main()
  22. {
  23.  
  24. cin>>t;
  25. while(t--)
  26. {
  27. cin>>n;
  28. for(int i=0;i<=n+5;i++)
  29. dp[i]=1000000000,uzo[i]=false;
  30. for(int i=1;i<=n;i++)
  31. cin>>a[i];
  32. a[0]=0;
  33. dp[0]=0;
  34. vector<int>b;
  35. b.pb(0);
  36. if(a[1]<a[2])
  37. b.pb(1);
  38.  
  39. for(int i=2;i<n;i++)
  40. if( a[i]<a[i-1]&&a[i]<a[i+1] ) b.pb(i);
  41. if( a[n]<a[n-1] )
  42. b.pb(n);
  43.  
  44. b.pb(0);
  45. b.pb(0);
  46. // cout<<b.size()<<endl;
  47. // if(b.size()==1)
  48. // cout<<-b[0]<<endl;
  49. // for(int i=0;i<b.size();i++)
  50. // cout<<b[i]<<" ";
  51. // cout<<endl;
  52. dp[1]= -a[ b[1] ];
  53. uzo[1]=true;
  54. kuda[1]=0;
  55. for( int i=1;i<b.size()-2;i++ )
  56. {
  57. // cout<<i<<endl;
  58. if( dp[i]-a[b[i+2] ] < dp[i+2] )
  59. {
  60. dp[i+2]=dp[i]-a[b[i+2] ];
  61. kuda[i+2]=i,uzo[i+2]=true;
  62. }
  63. if( b[i+1]-b[i]==2 && a[ b[i] ]+a[b[i+1] ] >= a[b[i]+1 ] && dp[i] < dp[i+1] )
  64. {
  65. dp[i+1]=dp[i];
  66. kuda[i+1]=i,uzo[i+1]=false;
  67. }
  68. else
  69. {
  70. if( dp[i]-a[b[i+1] ] < dp[i+1] )
  71. dp[i+1]= dp[i]-a[ b[i+1] ],kuda[i+1]=i,uzo[i+1]=true;
  72. }
  73. }
  74. int start = b.size()-3;
  75. // cout<<dp[start]<< " meho " <<endl;
  76. vector<int> res;
  77. // cout<< start << " " << uzo[start] << " lalal " <<endl;
  78. while( true )
  79. {
  80. if(start==0)
  81. break;
  82. if( uzo[start] )
  83. a[ b[start] ]*=-1;
  84. start=kuda[start];
  85. }
  86. for( int i = 1;i<=n;i++ )
  87. cout<<a[i]<< " ";
  88. cout<<endl;
  89. }
  90. return 0
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement