fork download
  1. #include <stdio.h>
  2.  
  3. long long int brr[10005] = {0},arr[10005] = {0},crr[10005] = {0};
  4.  
  5. int main() {
  6. long long int i,j,t,n,q,p,x,y,mi,ma,pa,pb,a,b,counter;
  7. scanf("%lld",&t);
  8. while(t--) {
  9. scanf("%lld",&n);
  10. for(i=1;i<=n;i++) {
  11. scanf("%lld",&arr[i]);
  12. brr[i] = 0;
  13. }
  14. counter = 1;
  15. scanf("%lld",&q);
  16. for(j=0;j<q;j++) {
  17. scanf("%lld",&p);
  18. if(p == 0) {
  19. scanf("%lld %lld",&x,&y);
  20. if((crr[brr[x]] == crr[brr[y]] && brr[x] != 0 && brr[y] != 0) || (x == y)) {
  21. printf("Invalid query!\n");
  22. }
  23. else {
  24. pa = (brr[x]==0?arr[x]:arr[crr[brr[x]]]);
  25. a = (brr[x] == 0 ? x : crr[brr[x]]);
  26. pb = (brr[y]==0?arr[y]:arr[crr[brr[y]]]);
  27. b = (brr[y] == 0 ? y : crr[brr[y]]);
  28. if(pa != pb) {
  29. ma = pa > pb ? a : b;
  30. mi = pa < pb ? a : b;
  31. if(brr[x] == 0 && brr[y] == 0) {
  32. brr[x] = counter;
  33. brr[y] = counter;
  34. crr[counter] = ma;
  35. counter++;
  36. }
  37. else {
  38. if(brr[mi] == 0) {
  39. brr[mi] = brr[ma];
  40. }
  41. else
  42. if(brr[ma] == 0) {
  43. brr[ma] = brr[mi];
  44. crr[brr[mi]] = ma;
  45. //crr[brr[mi]] = ma;
  46. //counter++;
  47. }
  48. else
  49. if(brr[ma] != 0 && brr[mi] != 0) {
  50. crr[brr[mi]] = crr[brr[ma]];
  51. }
  52. }
  53. }
  54. }
  55. }
  56. else {
  57. scanf("%lld",&x);
  58. if(brr[x] != 0) {
  59. printf("%lld\n",crr[brr[x]]);
  60. }
  61. else {
  62. printf("%lld\n",x);
  63. }
  64. }
  65. }
  66. }
  67. return 0;
  68. }
  69.  
  70.  
Success #stdin #stdout 0s 3576KB
stdin
1
2
1 2
2
0 1 2
1 1
stdout
2