Submission #1271632

#TimeUsernameProblemLanguageResultExecution timeMemory
1271632tvgkMisspelling (JOI22_misspelling)C++20
100 / 100
299 ms137364 KiB
#include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 5e5 + 7, mxX = 'z' - 'a', MOD = 1e9 + 7; int n, m, dp[mxN][28][2]; stack<int> stk[2]; vector<ii> query[mxN]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; if (u < v) query[u].push_back({v, 0}); else query[v].push_back({u, 1}); } for (int i = 0; i <= mxX; i++) { dp[n][i][0] = 1; stk[0].push(n); stk[1].push(n); } for (int i = n - 1; i >= 1; i--) { ll sum = 0; for (int j = mxX; j >= 0; j--) { dp[i][j][0] = (sum + dp[i + 1][j][0]) % MOD; sum = (sum + dp[i + 1][j][0] + dp[i + 1][j][1]) % MOD; } sum = 0; for (int j = 0; j <= mxX; j++) { dp[i][j][1] = (sum + dp[i + 1][j][1]) % MOD; sum = (sum + dp[i + 1][j][0] + dp[i + 1][j][1]) % MOD; } stk[0].push(i); stk[1].push(i); for (ii j : query[i]) { while (stk[j.se].top() < j.fi) stk[j.se].pop(); } for (int j = 0; j <= mxX; j++) { for (int tt = 0; tt <= 1; tt++) dp[i][j][tt] = dp[stk[tt].top()][j][tt]; } } ll ans = 0; for (int i = 0; i <= mxX; i++) ans = (ans + dp[1][i][0] + dp[1][i][1]) % MOD; cout << ans; }
#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...