Submission #793630

#TimeUsernameProblemLanguageResultExecution timeMemory
793630vjudge1Misspelling (JOI22_misspelling)C++17
100 / 100
1457 ms171344 KiB
#include <bits/stdc++.h> #define fi first #define se second const int N = 500500; const int mod = 1e9 + 7; using namespace std; void add(int &x, int y) { x += y; if (x >= mod) { x -= mod; } else if (x < 0) { x += mod; } } int n; int m; int d[N][26]; int s[N][26]; vector<int> A[N], B[N]; int main() { #ifdef zxc freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios_base::sync_with_stdio(0); cin >> n >> m; for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; if (a == b) { continue; } if (a < b) { A[a].push_back(b); } else { B[b].push_back(a); } } for (int i = 0; i < 26; i++) { d[1][i] = s[1][i] = 1; } set<pair<int, int>> S, T; for (int i = 2; i <= n; i++) { for (int j: A[i - 1]) { S.insert({i - 1, j}); } for (int j: B[i - 1]) { T.insert({i - 1, j}); } while (!S.empty() && (--S.end())->se < i) { S.erase(--S.end()); } while (!T.empty() && (--T.end())->se < i) { T.erase(--T.end()); } int p_1 = S.empty() ? 0 : (--S.end())->fi; int p_2 = T.empty() ? 0 : (--T.end())->fi; for (int j = 0; j < 26; j++) { for (int h = 0; h < j; h++) { add(d[i][j], s[i - 1][h] - s[max(p_1, p_2)][h]); if (p_1 < p_2) { add(d[i][j], s[p_2][h] - s[p_1][h]); } } for (int h = j + 1; h < 26; h++) { add(d[i][j], s[i - 1][h] - s[max(p_1, p_2)][h]); if (p_1 > p_2) { add(d[i][j], s[p_1][h] - s[p_2][h]); } } s[i][j] = s[i - 1][j]; add(s[i][j], d[i][j]); } } int res = 0; for (int i = 0; i < 26; i++) { add(res, s[n][i]); } cout << res << "\n"; }
#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...