Problem p02726 (C++) — buggy submission, verdict: Time Limit Exceeded

#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T>
using Tree =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
// #define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 2001; // check the limits, dummy
int N, X, Y;
vi v[MX];
unordered_map<int, int> m;
vi visit(MX);
int nd = -1;
unordered_map<int, int> ct;
int mp(int a, int b) { return (a + b + 1) * (a + b) / 2 + a; }
int mod(int x) {
  if (x < 0)
    return -x;
  else
    return x;
}

void calc(int S, int level) {
  //	 if(m.find(mp(S,nd))!=m.end())
  //	 {
  //	 	return;
  //	 }
  //	if(S!=nd)
  //		m[mp(nd,S)]=mod(nd-S)>level?level:mod(nd-S);
  visit[S] = 1;
  if (m.find(mp(nd, S)) == m.end()) {
    m[mp(nd, S)] = min(level, mod(nd - S));
  } else {
    int val = m[mp(nd, S)];
    if (level < val)
      m[mp(nd, S)] = level;
  }
  for (int x = 0; x < v[S].size(); x++) {
    if (/*v[S][x]>S && */ visit[v[S][x]] == 0) {
      calc(v[S][x], level + 1);
    }
  }
  visit[S] = 0;
  return;
}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  cin >> N >> X >> Y;
  FOR(x, 1, N) {
    v[x].pb(x + 1);
    v[x + 1].pb(x);
  }
  v[X].pb(Y);
  v[Y].pb(X);
  FOR(x, 1, N + 1) {
    nd = x;
    calc(x, 0);
    FOR(y, x + 1, N + 1) {
      if (x != y) {
        ct[m[mp(x, y)]]++;
      }
    }
  }
  F0R(x, N - 1) { cout << ct[x + 1] << endl; }
  return 0;
}


Error: TLE

Fixed submission:

#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T>
using Tree =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 2001; // check the limits, dummy
int N, X, Y;
vi v[MX];
std::map<pi, int> m;
vi visit(MX);
int nd = -1;
std::map<int, int> ct;
int mod(int x) {
  if (x < 0)
    return -x;
  else
    return x;
}

void calc(int S, int level) {
  // if(m.find(S,nd)!=m.end())
  // {
  // 	m[mp(nd,S)]
  // }
  //	if(S!=nd)
  //		m[mp(nd,S)]=mod(nd-S)>level?level:mod(nd-S);
  visit[S] = 1;
  if (m.find(mp(nd, S)) == m.end()) {
    m[mp(nd, S)] = min(level, mod(nd - S));
  } else {
    int val = m[mp(nd, S)];
    if (level < val)
      m[mp(nd, S)] = level;
  }
  for (int x = 0; x < v[S].size(); x++) {
    if (/*v[S][x]>S && */ visit[v[S][x]] == 0) {
      calc(v[S][x], level + 1);
    }
  }
  visit[S] = 0;
  return;
}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  cin >> N >> X >> Y;
  FOR(x, 1, N) {
    v[x].pb(x + 1);
    v[x + 1].pb(x);
  }
  v[X].pb(Y);
  v[Y].pb(X);
  FOR(x, 1, N + 1) {
    nd = x;
    calc(x, 0);
    FOR(y, x + 1, N + 1) {
      if (x != y) {
        ct[m[mp(x, y)]]++;
      }
    }
  }
  F0R(x, N - 1) { cout << ct[x + 1] << endl; }
  return 0;
}