Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define NMAX 1000005
  3.  
  4. using namespace std;
  5.  
  6. struct A
  7. {
  8. int nr, val[15];
  9. bool semn[15];
  10. };
  11.  
  12. bool crt ( A x, A y );
  13.  
  14. A v[NMAX];
  15. int t, n, i, j, nr, a[NMAX], S[NMAX], maxx;
  16. char c, s[20];
  17.  
  18. int main()
  19. {
  20. ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  21. cin >> t;
  22. while ( t-- )
  23. {
  24. cin >> n;
  25. for ( i = 1 ; i <= n ; i++ )
  26. {
  27. cin >> c >> nr;
  28. cin.getline ( s, 20 );
  29.  
  30. v[i].nr = nr;
  31. if ( s[1] == 'T' && c == '<' ) v[i].semn[1] = 1, v[i].val[1]++;
  32. else if ( s[1] == 'T' && c == '=' ) v[i].semn[3] = 1, v[i].val[3]++;
  33. else if ( s[1] == 'T' && c == '>' ) v[i].semn[4] = 1, v[i].val[4]++;
  34.  
  35. else if ( s[1] == 'F' && c == '<' ) v[i].semn[5] = 1, v[i].val[5]++;
  36. else if ( s[1] == 'F' && c == '=' ) v[i].semn[6] = 1, v[i].val[6]++;
  37. else if ( s[1] == 'F' && c == '>' ) v[i].semn[2] = 1, v[i].val[2]++;
  38. }
  39.  
  40. sort ( v + 1, v + n + 1, crt );
  41.  
  42. for ( j = 1 ; j < n ; j++ )
  43. {
  44. i = j + 1;
  45. while ( i <= n && v[j].nr == v[i].nr )
  46. {
  47. if ( v[i].semn[1] == 1 ) v[j].semn[1] = 1, v[j].val[1] += v[i].val[1];
  48. if ( v[i].semn[2] == 1 ) v[j].semn[2] = 1, v[j].val[2] += v[i].val[2];
  49. if ( v[i].semn[3] == 1 ) v[j].semn[3] = 1, v[j].val[3] += v[i].val[3];
  50. if ( v[i].semn[4] == 1 ) v[j].semn[4] = 1, v[j].val[4] += v[i].val[4];
  51. if ( v[i].semn[5] == 1 ) v[j].semn[5] = 1, v[j].val[5] += v[i].val[5];
  52. if ( v[i].semn[6] == 1 ) v[j].semn[6] = 1, v[j].val[6] += v[i].val[6];
  53.  
  54. i++;
  55. }
  56.  
  57. j = i - 1;
  58. }
  59.  
  60. for ( j = 1 ; j <= n ; j++ )
  61. {
  62. if ( v[j].semn[1] == 1 ) a[1] += v[j].val[1], a[j] -= v[j].val[1];
  63. if ( v[j].semn[2] == 1 ) a[2] += v[j].val[2], a[j+1] -= v[j].val[2];
  64. if ( v[j].semn[3] == 1 ) a[j] += v[j].val[3], a[j+1] -= v[j].val[3];
  65. if ( v[j].semn[4] == 1 ) a[j+1] += v[j].val[4];
  66. if ( v[j].semn[5] == 1 ) a[j] += v[j].val[5];
  67. if ( v[j].semn[6] == 1 ) a[1] += v[j].val[6], a[j] -= v[j].val[6], a[j+1] += v[j].val[6];
  68.  
  69. i = j + 1;
  70. while ( i <= n && v[j].nr == v[i].nr ) i++;
  71. j = i - 1;
  72. }
  73.  
  74. S[1] = a[1];
  75. for ( i = 2 ; i <= n ; i++ ) S[i] = S[i-1] + a[i];
  76.  
  77. maxx = 0;
  78. for ( i = 1 ; i <= n ; i++ ) maxx = max ( maxx, S[i] );
  79. cout << n - maxx << '\n';
  80.  
  81. /*for ( i = 1 ; i <= n ; i++ ) cout << S[i] << ' ';
  82. cout << '\n';*/
  83.  
  84. for ( i = 1 ; i <= n ; i++ )
  85. {
  86. a[i] = S[i] = v[i].nr = 0;
  87. for ( j = 1 ; j <= 6 ; j++ ) v[i].semn[j] = 0, v[i].val[j] = 0;
  88. }
  89.  
  90. }
  91.  
  92. return 0;
  93. }
  94.  
  95. bool crt ( A x, A y )
  96. {
  97. if ( x.nr < y.nr || ( x.nr == y.nr && x.semn < y.semn ) ) return 1;
  98.  
  99. return 0;
  100. }
  101.  
  102. /*
  103.  
  104. 2
  105. 3
  106. = 5 True
  107. > 3 True
  108. = 1 False
  109. 2
  110. > 4 True
  111. = 4 True
  112.  
  113. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement