Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 12th, 2012  |  syntax: C++  |  size: 1.44 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <stack>
  5. #include <algorithm>
  6. #include <bitset>
  7. #include <math.h>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. #include <limits.h>
  12. #include <limits>
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <cstring>
  16. #include <sstream>
  17. using namespace std;
  18. int Z, n, m, ti, ans[1000005], x[1000005];
  19. set <int> s;
  20. int main(){
  21.     scanf("%d", &Z);
  22.     while(Z--){
  23.         scanf("%d %d", &n, &m);
  24.         memset(x, 0, sizeof x);
  25.         memset(ans, -1, sizeof ans);
  26.  
  27.         bool wrong = false;
  28.         for(int i = 0; i < m; i++){
  29.             scanf("%d", &ti);
  30.             --ti;
  31.  
  32.             if(ti == -1){
  33.                 s.insert(i);
  34.                 ans[i] = 0;
  35.             }else{
  36.                 set <int> :: iterator d = s.lower_bound(x[ti]);
  37.                 if(d == s.end())wrong = true;
  38.                 else{
  39.                     ans[(*d)] = ti + 1;
  40.                     s.erase(d);
  41.                 }
  42.                 x[ti] = i;
  43.             }
  44.         }
  45.        
  46.         if(wrong)printf("NO\n");
  47.         else{
  48.             printf("YES\n");
  49.             bool first = true;
  50.             for(int i = 0; i < m; i++)
  51.                 if(ans[i] != -1){
  52.                     if(first)first = false;
  53.                     else printf(" ");
  54.  
  55.                     printf("%d", ans[i]);
  56.                 }
  57.             printf("\n");
  58.         }
  59.         s.clear();
  60.     }
  61.     return 0;
  62. }