Advertisement
Morass

Ceiling

Nov 27th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define PB push_back
  5. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  6. #define CL(A,I) (memset(A,I,sizeof(A)))
  7. #define aa first
  8. #define bb second
  9. #define FOR(i, m, n) for (int i(m); i < (int)n; i++)
  10. #define REP(i, n) FOR(i, 0, n)
  11. #define F(n) FOR(i, 0, n)
  12. #define FF(n) FOR(j, 0, n)
  13. typedef long long ll;
  14. typedef pair<ll,ll> ii;
  15. typedef vector<ll> vi;
  16. typedef vector<ii> vii;
  17.  
  18. int n, m, tr[22];
  19. set<string> vs;
  20. string cs;
  21. struct nd {int l, r, v;};
  22. nd nds[32];
  23.  
  24. void dfs(int x) {
  25.     cs += "(";
  26.     if (nds[x].l != -1) dfs(nds[x].l);
  27.     else cs += "[]";
  28.     if (nds[x].r != -1) dfs(nds[x].r);
  29.     else cs += "{}";
  30.     cs += ")";
  31. }
  32.  
  33. int main() {
  34.     scanf("%d%d", &n, &m);
  35.     F(n) {
  36.         FF(m) scanf("%d", &tr[j]);
  37.         nds[0] = {-1, -1, tr[0]};
  38.         cs = "";
  39.         FOR(j, 1, m) {
  40.             int cur = 0;
  41.             while (1) {
  42.                 if (nds[cur].v < tr[j]) {
  43.                     if (nds[cur].l == -1) {
  44.                         nds[j] = {-1, -1, tr[j]};
  45.                         nds[cur].l = j;
  46.                         break;
  47.                     } else {
  48.                         cur = nds[cur].l;
  49.                     }
  50.                 } else {
  51.                     if (nds[cur].r == -1) {
  52.                         nds[j] = {-1, -1, tr[j]};
  53.                         nds[cur].r = j;
  54.                         break;
  55.                     } else {
  56.                         cur = nds[cur].r;
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.         dfs(0);
  62.         vs.insert(cs);
  63.     }
  64.     printf("%d\n", (int)vs.size());
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement