Submission #1169667

#TimeUsernameProblemLanguageResultExecution timeMemory
1169667fryingducMisspelling (JOI22_misspelling)C++20
100 / 100
315 ms105876 KiB
#include "bits/stdc++.h"

using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif

const int maxn = 5e5 + 5;
const int mod = 1e9 + 7;
int n, m, a[maxn], b[maxn];
int f[maxn][26], g[2][26];
vector<pair<int, int>> ev[maxn];
set<int> st[2];

int add(int x, int y) {
  if (y < 0) y += mod;
  x = x + y;
  if (x >= mod) x -= mod;
  return x;
}

void solve() {
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) {
    int x, y; cin >> x >> y;
    if (x < y) {
      ev[x + 1].emplace_back(y, 1);
    } else {
      ev[y + 1].emplace_back(x, 0);
    }
  }
  for (int i = 0; i <= n; ++i) {
    for (int j = 0; j < 26; ++j) {
      f[i][j] = 1;
    }
  }
  auto ins = [&](int p) {
    st[0].insert(p);
    st[1].insert(p);
    for (int i = 0; i < 26; ++i) {
      g[0][i] = add(g[0][i], f[p][i]);
      g[1][i] = add(g[1][i], f[p][i]);
    }
  };
  auto del = [&](int id, int p) {
    while (!st[id].empty() and *st[id].begin() <= p) {
      for (int j = 0; j < 26; ++j) {
        g[id][j] = add(g[id][j], -f[*st[id].begin()][j]);
      }
      st[id].erase(st[id].begin());
    }
  };
  ins(n);
  for (int i = n - 1; i; --i) {
    for (auto [p, id] : ev[i + 1]) {
      del(id, p);
    }
    int sum = 1;
    for (int j = 0; j < 26; ++j) {
      f[i][j] = sum;
      sum = add(sum, g[0][j]);
    }
    sum = 0;
    for (int j = 25; j >= 0; --j) {
      f[i][j] = add(f[i][j], sum);
      sum = add(sum, g[1][j]);
    }
    ins(i);
  } 
  int res = 0;
  for (int j = 0; j < 26; ++j) {
    res = add(res, f[1][j]);
  }
  cout << res;
}

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

  solve();

  return 0;
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...