fork download
  1. #include<bits/stdc++.h>
  2. #define mm 1005
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int n,i;
  8. scanf("%d",&n);
  9.  
  10. int a[n];
  11. pair<int ,int> prp[n];
  12. pair<int ,int> prn[n];
  13. pair<int ,int> pro[n];
  14. pair<int ,int> org[n];
  15.  
  16. int cp=0,cn=0,co=0;
  17.  
  18. for(i=0;i<n;i++)
  19. {
  20. scanf("%d",&a[i]);
  21.  
  22. if(a[i]<0) prn[cp++]=make_pair(a[i],i+1);
  23. if(a[i]>0) prp[cn++]=make_pair(a[i],i+1);
  24. if(a[i]=0) pro[co++]=make_pair(a[i],i+1);
  25.  
  26. org[i]=make_pair(abs(a[i]),i+1);
  27. }
  28.  
  29. if(co>2)
  30. {
  31. for(i=1;i<n-1;i++)
  32. printf("1 %d %d\n",i,i+1);
  33. }
  34. else if(co==2)
  35. {
  36. if(cn%2)
  37. {
  38. for(i=1;i<n-1;i++)
  39. printf("1 %d %d\n",i,i+1);
  40. }
  41. else
  42. {
  43. sort(org,org+n);
  44. printf("2 %d\n",org[0].second);
  45. for(i=2;i<n-1;i++)
  46. {
  47. printf("1 %d %d\n",org[i].second,org[i+1].second);
  48. }
  49. }
  50. }
  51. else
  52. {
  53. if(co==1)
  54. {
  55. if(cn%2)
  56. {
  57. sort(prn,prn+cn);
  58. sort(org,org+n);
  59.  
  60. int sorry=prn[cn-1].second;
  61. printf("2 %d\n",org[0].second);
  62. for(i=1;i<n-1;i++)
  63. { if(org[i+1].second==sorry&&i+2!=n)
  64. {
  65. printf("1 %d %d\n",org[i].second,org[i+2].second);
  66. i++;
  67. }
  68. else
  69. printf("1 %d %d\n",org[i].second,org[i+1].second);
  70. }
  71. }
  72. else
  73. {
  74. sort(org,org+n);
  75. int sorry=org[0].second;
  76.  
  77. for(i=0;i<n-1;i++)
  78. { if(org[i+1].second==sorry&&i+2!=n)
  79. {
  80. printf("1 %d %d\n",org[i].second,org[i+2].second);
  81. i++;
  82. }
  83. else
  84. printf("1 %d %d\n",org[i].second,org[i+1].second);
  85. }
  86. }
  87. }
  88. else
  89. {
  90. if(cn%2)
  91. {
  92. sort(prn,prn+cn);
  93. sort(org,org+n);
  94.  
  95. int sorry=prn[cn-1].second;
  96. for(i=0;i<n-1;i++)
  97. { if(org[i+1].second==sorry&&i+2!=n)
  98. {
  99. printf("1 %d %d\n",org[i].second,org[i+2].second);
  100. i++;
  101. }
  102. else
  103. printf("1 %d %d\n",org[i].second,org[i+1].second);
  104. }
  105. }
  106. else
  107. {
  108. sort(prn,prn+cn);
  109. sort(prp,prp+cp);
  110. int sorry=(prp[0].first<abs(prn[cn-1].first)?prp[0].second:prn[cn-1].second);
  111.  
  112. for(i=0;i<n-1;i++)
  113. { if(org[i+1].second==sorry&&i+2!=n)
  114. {
  115. printf("1 %d %d\n",org[i].second,org[i+2].second);
  116. i++;
  117. }
  118. else
  119. printf("1 %d %d\n",org[i].second,org[i+1].second);
  120. }
  121. }
  122. }
  123. }
  124.  
  125.  
  126. }
  127.  
Success #stdin #stdout 0s 15240KB
stdin
5
5 -2 0 1 -3
stdout
1 1 2
1 2 3
1 3 5