fork download
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include <math.h>
  5. #include <algorithm>
  6. #include <string>
  7. #include <map>
  8. using namespace std;
  9.  
  10. int main(){
  11. int t=0;
  12. cin>>t;
  13. while(t--){
  14. vector<int> a;
  15. vector<int> b;
  16. int n=0;
  17. cin>>n;
  18. for(int i=0;i<n;++i){
  19. int num=0;
  20. cin>>num;
  21. a.push_back(num);
  22. }
  23. while(!a.empty()){
  24. if(a.size()==1){
  25. if(a[0]==0){
  26. b.push_back(1);
  27. }else{
  28. b.push_back(0);
  29.  
  30. }
  31. break;
  32. }
  33. map<int,int> m;
  34. vector<int> num;
  35. for(int i=0;i<a.size();++i){
  36. if(m[a[i]]==0){
  37. m[a[i]]=i+1;
  38. num.push_back(a[i]);
  39. }
  40. }
  41. // cout<<m[1];break;
  42. sort(num.begin(), num.end());
  43. int maxNum=0;
  44. int maxIdx=0;
  45. for(int i=0;i<num.size();++i){
  46. // cout<<num[i]<<endl;
  47. if(num[i]==i){
  48. maxNum=i;
  49. // cout<<maxNum<<endl;
  50. }else{
  51. break;
  52. }
  53. }
  54. b.push_back(maxNum+1);
  55. // cout<<maxNum;break;
  56. for(int i=0;i<=maxNum;++i){
  57. // cout<<maxIdx<<" "<<m[i]<<endl;
  58. maxIdx=max(maxIdx,m[i]);
  59.  
  60. }
  61. // cout<<maxIdx;break;
  62. vector<int> tmp;
  63. int as=a.size();
  64. // cout<<maxIdx<<" "<<as<<endl;
  65. // break;
  66. for(int i=maxIdx;i<as;++i){
  67. tmp.push_back(a[i]);
  68. }
  69. a=tmp;
  70.  
  71.  
  72.  
  73. }
  74. cout<<b.size()<<endl;
  75. for(int i=0;i<b.size();++i){
  76.  
  77. cout<<b[i]<<" ";
  78. }
  79. cout<<endl;
  80.  
  81.  
  82. }
  83. }
Success #stdin #stdout 0.01s 5440KB
stdin
6
5
1 0 2 0 3
8
2 2 3 4 0 1 2 0
1
1
5
0 1 2 3 4
4
0 1 1 0
10
0 0 2 1 1 1 0 0 1 1
stdout
1
4 
2
5 1 
1
0 
1
5 
2
2 2 
4
3 2 2 0