Cod sursa(job #2539406)

Utilizator DavidLDavid Lauran DavidL Data 5 februarie 2020 20:39:05
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("order.in");
ofstream fo("order.out");

struct Treap {
   Treap *left, *right;
   int val, priority;
   int subarb;

   Treap(int v, int p) {
      val = v;
      priority = p;
      left = 0; right = 0;
      subarb = 0;
   }
};

Treap *T = new Treap(1000000, 2000000000);
Treap *nil;
int n;

int getRandom() {
   return 1LL * rand() % 10000 * 10000 + rand() % 10000;
}

void rotToRight(Treap *nod) {
    cout << 432432;
   Treap *oldNod = nod;
   Treap *oldNlr = 0;
   if (nod->left)
       oldNlr = nod->left->right;

   nod = nod->left;
   nod->right = oldNod;
   nod->right->left = oldNlr;
}

void rotToLeft(Treap *nod) {
    cout << 432432;
    Treap *oldNod = nod;
    Treap *oldNrl = 0;
    if (nod->right)
        oldNrl = nod->right->left;

    nod = nod->right;
    nod->left = oldNod;
    nod->left->right = oldNrl;
}

void balans(Treap *nod) {
   // un fiu posibil sa nu fie bine ca heap
   if (nod->left && nod->left->priority > nod->priority) {
      rotToRight(nod);
   }
   else if (nod->right && nod->right->priority > nod->priority) {
      rotToLeft(nod);
   }
}

void baga(Treap *nod, int val) {
   if (nod == 0) {
      // aici
      nod->val = val;
      nod->priority = getRandom();
      return;
   }

   if (val <= nod->val) {
      // stanga
      baga(nod->left, val);
   }
   else {
      // dreapta
      baga(nod->right, val);
   }

   ///balans(nod);
}

bool cauta(Treap *nod, int x) {
    if (nod == 0)
        return 0;

    if (nod->val == x)
        return 1;
    if (x <= nod->val)
        return cauta(nod->left, x);
    else
        return cauta(nod->right, x);
}

int kthElement(Treap *nod, int k) {
    return 0;
}

int main()
{
   fi >> n;

   for (int i = 1; i <= n; i++) {
      baga(T, i);
   }
   cout << (T->left == 0);
   return 0;

   cout << cauta(T, 1);

   int curr = 1, total = n;
   for (int i = 1; i <= n; i++) {
      int x = kthElement(T, curr);
      fo << x << " ";
      //scoate(R, x);

      total--;
      curr = (curr + i - 1) % total;
      if (curr == 0)
         curr = total;
   }


   return 0;
}