fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5. int n;
  6. cin >> n;
  7. int *a=new int[n];
  8. int *monotone = new int[n];//单调性数组
  9. int count = 0;//单调性改变次数
  10. //画图的功能是额外的,不影响判断
  11. int *draw = new int[n];//画图辅助数组
  12. int max = 0;//画图辅助
  13. int min = 0;
  14.  
  15. for(int i=0;i<n;i++){
  16. cin >> a[i];
  17. }
  18. if(n==1){
  19. cout<<"Yes"<<endl;
  20. }else{
  21. monotone[0] = 0;
  22. for(int i=1;i<n;i++){
  23. if(a[i] - a[i-1]){
  24. monotone[i] = a[i] > a[i-1]?1:-1;
  25. }else{
  26. monotone[i] = 0;
  27. }
  28. if(monotone[i]*monotone[i-1]<0){
  29. count++;
  30. }
  31. }
  32. }
  33. //这部分是我自己加的画图,不影响整体判断功能
  34. draw[0] = 0;
  35. for(int i=1;i<n;i++){
  36. draw[i] = monotone[i] + draw[i-1];
  37. if(draw[i]>max){
  38. max=draw[i];
  39. }
  40. if(draw[i]<min){
  41. min=draw[i];
  42. }
  43. }
  44.  
  45. for(int i=max;i>=min;i--){
  46. for(int j=0;j<n;j++){
  47. if(draw[j] == i){
  48. if(monotone[j]>0){
  49. cout<<"/ ";
  50. }
  51. if(monotone[j]==0){
  52. cout<<"- ";
  53. }
  54. if(monotone[j]<0){
  55. cout<<"\\ ";
  56. }
  57. }else{
  58. cout<<" ";
  59. }
  60. }
  61. cout<<endl;
  62. }
  63.  
  64. //根据单调性改变次数判断是否为近序数组
  65. if(count>1){
  66. cout<<"No"<<endl;
  67. }else{
  68. cout<<"Yes"<<endl;
  69. }
  70. return 0;
  71. }
Success #stdin #stdout 0.01s 5240KB
stdin
10
1 2 3 4 5 4 3 2 1 10
stdout
        /           
      /   \         
    /       \       
  /           \   / 
-               \   
No