Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- using namespace std;
- typedef pair<int, int> P;
- typedef multimap<int, int> MM;
- void blah(vector<int>&, map<int, int>&, int, int, int, int);
- int main() {
- int k = 7;
- //cin >> k;
- int INPUT_TEMP[6][2] = {{3, 6}, {4, 1}, {4, 7}, {5, 2}, {6, 1}, {5, 0}};
- vector<P> vp; //vektor parovi
- vector<int> v(k + 1, -3); //vektor broevi
- v[0] = 0;
- v[k] = k;
- map<int, int> sledenje; //first=pozicija, second=index na pozicija vo v
- for (int i = 0; i < k - 1; ++i) {
- int a = INPUT_TEMP[i][0], b = INPUT_TEMP[i][1];//int a, b;
- //cin >> a >> b;
- P p(a, b);
- vp.push_back(p);
- sledenje[a] = -2;
- sledenje[b] = -2;
- }
- sledenje[0] = 0; //0 e sekogas prv
- sledenje[k] = k; //k e sekogas posleden
- for (unsigned int i = 0; i < vp.size(); ++i) {
- blah(v, sledenje, vp[i].first, vp[i].second, -4, -4); //first=a, second=b
- }
- for (int i = 0; i <= k; ++i) {
- cout << v[(unsigned)i] << " ";
- }
- }
- void mmfuck(vector<int>& v, map<int, int>& sledenje, MM& mmop, int n, int ia, int ib) {
- pair<MM::iterator, MM::iterator> rz = mmop.equal_range(n);
- for (MM::iterator it = rz.first; it != rz.second; ++it) {
- cout << endl << "R" << n << ": ";
- blah(v, sledenje, n, (*it).second, ia, ib); //*it.second = z
- }
- }
- void blah(vector<int>& v, map<int, int>& sledenje, int x, int y, int ix_passed = -4, int iy_passed = -4) {
- static MM mmop; //multimapa ostanati parovi
- pair<MM::iterator, MM::iterator> range_z;
- static const int k = v.size() - 1;
- //-4 znaci ne e praten parameter
- int ix = ix_passed == -4 ? sledenje[x] : ix_passed;
- int iy = iy_passed == -4 ? sledenje[y] : iy_passed;
- cout << "x:" << x << " y:" << y << " ix:" << ix << " iy:" << iy << '\t';
- if (iy != -2 && ix == -2) {
- cout << "\n\t";
- blah(v, sledenje, y, x, iy, ix);
- } else if (iy == -2) {
- if (ix == -2) { //dvata broja ne gi ima do sega vo nizata
- if (x > y) { //napravi taka da x < y
- int t = x;
- x = y;
- y = t;
- }
- mmop.insert(P(x, y)); //dodaj gi da se probaat posle
- mmop.insert(P(y, x));
- cout << "\tdodadeni vo mmop (mmop[" << x << "]=" << y << ", mmop[" << y << "]=" << x << ")\n";
- } else {
- if (ix == 0) {
- iy = ix + 1;
- } else if (ix == k) {
- iy = ix - 1;
- } else if (sledenje[ix - 1] != -2) { //ima element pred x
- iy = ix + 1;
- } else if (sledenje[ix + 1] != -2) { //nema element pred x, ima element posle x
- iy = ix - 1;
- }
- v[iy] = y;
- sledenje[y] = iy;
- cout << "v[" << iy << "]:" << v[iy];
- /*
- PLAN
- sega proveruva dali ima element pred i posle x pred da odluci za y
- ama ne proveruva vo mmop?
- */
- pair<MM::iterator, MM::iterator> rz = mmop.equal_range(y);
- for (MM::iterator it = rz.first; it != rz.second; ++it) {
- cout << endl << "R" << y << ": ";
- blah(v, sledenje, y, (*it).second, iy, -4); //*it.second = z
- }
- //mmfuck(v, sledenje, mmop, x, ix, -4);
- //mmfuck(v, sledenje, mmop, y, iy, -4);
- /*
- for (MM::iterator it = range_z.first; it != range_z.second; ++it) {
- cout << endl << "RX: ";
- blah(v, sledenje, x, (*it).second, ix, -4); //*it.second = z
- }
- range_z = mmop.equal_range(y);
- for (MM::iterator it = range_z.first; it != range_z.second; ++it) {
- cout << endl << "RY: ";
- blah(v, sledenje, x, (*it).second, -4, iy); //*it.second = z
- }*/
- /*
- int z = mop[x]; //ako ima drug par preostanat
- if (z != 0) {
- cout << endl << "RX: ";
- blah(v, sledenje, x, z, ix, -4);
- } else {
- z = mop[y];
- if (z != 0) {
- cout << endl << "RY: ";
- blah(v, sledenje, y, z, -4, iy);
- }
- }*/
- cout << endl;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment