Submission #554107

#TimeUsernameProblemLanguageResultExecution timeMemory
554107tht2005Misspelling (JOI22_misspelling)C++17
100 / 100
401 ms61836 KiB
#include <bits/stdc++.h>

using namespace std;

const int md = (int)1e9 + 7;
void add(int& a, int b) {
    a += b;
    if(a >= md) a -= md;
    if(a < 0) a += md;
}

const int N = 500005;
int n, m, res, x[N], y[N], pref[26], suf[26], f[N][26];
stack<int> S, T;

int main() {
    scanf("%d %d", &n, &m);
    while(m--) {
        int a, b;
        scanf("%d %d", &a, &b);
        if(a < b) {
            x[a] = max(x[a], b);
        }
        else {
            y[b] = max(y[b], a);
        }
    }
    for(int i = 0; i < 26; ++i) {
        f[n][i] = 1;
    }
    for(int i = n - 1, j; i > 0; --i) {
        S.push(i + 1);
        for(int c = 0; c < 26; ++c) {
            add(pref[c], f[i + 1][c]);
        }
        while(!S.empty() && (j = S.top()) <= x[i]) {
            for(int c = 0; c < 26; ++c) {
                add(pref[c], -f[j][c]);
            }
            S.pop();
        }
        T.push(i + 1);
        for(int c = 0; c < 26; ++c) {
            add(suf[c], f[i + 1][c]);
        }
        while(!T.empty() && (j = T.top()) <= y[i]) {
            for(int c = 0; c < 26; ++c) {
                add(suf[c], -f[j][c]);
            }
            T.pop();
        }
        for(int c = 0, s = 0; c < 26; ++c) {
            f[i][c] = 1;
            add(f[i][c], s);
            add(s, pref[c]);
        }
        for(int c = 26, s = 0; c--; ) {
            add(f[i][c], s);
            add(s, suf[c]);
        }
    }
    for(int c = 0; c < 26; ++c) {
        add(res, f[1][c]);
    }
    printf("%d", res);
    return 0;
}

Compilation message (stderr)

misspelling.cpp: In function 'int main()':
misspelling.cpp:17:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
misspelling.cpp:20:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |         scanf("%d %d", &a, &b);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#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...