Mike4235

LAH21_GALON

Mar 26th, 2021 (edited)
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. /*#pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("unroll-loops")
  3. #pragma GCC target("avx,avx2,fma")*/
  4. // only when really needed
  5.  
  6. /* GNU G++17 7.3.0: No long long for faster code
  7.    GNU G++17 9.2.0 (64 bit, msys 2): Long long only for faster code */
  8.  
  9. #include <bits/stdc++.h>
  10.  
  11. #define for1(i,a,b) for (int i = a; i <= b; i++)
  12. #define for2(i,a,b) for (int i = a; i >= b; i--)
  13. #define int long long
  14.  
  15. #define sz(a) (int)a.size()
  16. #define pii pair<int,int>
  17.  
  18. /*
  19. __builtin_popcountll(x) : Number of 1-bit
  20. __builtin_ctzll(x) : Number of trailing 0
  21. */
  22.  
  23. #define PI 3.1415926535897932384626433832795
  24. #define INF 1000000000000000000
  25. #define MOD 1000000007
  26. #define MOD2 1000000009
  27. #define EPS 1e-6
  28.  
  29. using namespace std;
  30.  
  31. int n, e, a[100005];
  32. set<int> se;
  33.  
  34. signed main() {
  35.    
  36.     ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  37.    
  38.      freopen("GALON.inp", "r", stdin);
  39.      freopen("GALON.out", "w", stdout);
  40.    
  41.     cin >> n >> e;
  42.    
  43.     for1(i,1,n-1) a[i] = i + 1;
  44.    
  45.     int sum = n, br = 1;
  46.     while (sum <= e) {
  47.         sum += br;
  48.         br++;
  49.     }
  50.     sum -= br;
  51.     br--;
  52.    
  53.     reverse(a + n - br, a + n);
  54.     int pos = n - br - 1, cur = n - 1;
  55.    
  56.     for1(i,sum+1,e) {
  57.         if (cur == pos) {
  58.             pos--;
  59.             cur = n - 1;
  60.         }
  61.        
  62.         swap(a[pos], a[cur]);
  63.         cur--;
  64.     }
  65.    
  66.     for1(i,1,n-1) se.insert(i);
  67.     for1(i,1,n-1) {
  68.        
  69.         auto it = prev(se.lower_bound(a[i]));
  70.         cout << a[i] << " " << *it << "\n";
  71.         se.erase(a[i]);
  72.        
  73.     }
  74.    
  75. }
Advertisement
Add Comment
Please, Sign In to add comment