You are on page 1of 3

#include #include #include #include #include #include #include #include #include

<iostream> <cstdio> <cstdlib> <string.h> <vector> <string> <cmath> <map> <algorithm>

using namespace std; typedef vector<int> vi; typedef long long ll; #define #define #define #define #define #define #define #define #define #define #define #define #define debug(args...) dbg(),args forn(i, n) for(int i = 0; i < (int)(n); i++) ford(i, n) for(int i = (int)(n) - 1; i >= 0; i--) fore(i, a, n) for(int i = (int)(a); i < (int)(n); i++) pb push_back mp make_pair fs first sc second last(a) (int(a.size()) - 1) all(a) a.begin(), a.end() mem(a,b) memset(a,b,sizeof(a)) max(a,b) ((a > b) ? a : b) min(a,b) ((a < b) ? a : b)

const int INF = 1000000000; const int MAX = 100000; struct dbg { template<typename T> dbg& operator , (const T& v) { cerr << v << " "; return *this; } ~dbg() { cerr << endl; } }; struct node { int info, index; node *next; node(int data, int id) { info = data; index = id; next = NULL; } }; node *insert(node *root, int data, int id) { node *p = new node(data, id); if (root == NULL) { root = p; return root;

} node *iter = root; if (data < iter->info) { p->next = root; root = p; return root; } while (iter->next != NULL) { if (data >= iter->info && data < iter->next->info) { p->next = iter->next; iter->next = p; return root; } iter = iter->next; } iter->next = p; return root; } int inversions(node *root) { int count = 0; node *iter1 = root, *iter2; while (iter1 != NULL) { iter2 = iter1->next; while (iter2 != NULL) { if (iter1->info > iter2->info) { debug(iter1->info, iter2->info); count++; break; } iter2 = iter2->next; } iter1 = iter1->next; } return count; } void printList(node *root) { while (root != NULL) { cout << root->info << " " << root->index << endl; root = root->next; } } int main (int argc, char *argv[]) { int n; cin >> n; node *root = NULL; forn(i, n) {

int k, a, x, y, m; cin >> k >> a >> x >> y >> m; forn(j, k) { root = insert(root, a, i+1); a = (a*x+y)%m; } } cout << inversions(root) << endl; printList(root); return 0; }

You might also like