Submission #617430

#TimeUsernameProblemLanguageResultExecution timeMemory
617430patrikpavic2Misspelling (JOI22_misspelling)C++17
100 / 100
657 ms124364 KiB
#include <cstdio> #include <set> #include <algorithm> #include <vector> #define PB push_back using namespace std; typedef long long ll; const int N = 5e5 + 500; const int ALP = 30; const int MOD = 1e9 + 7; inline int add(int A, int B){ if(A + B >= MOD) return A + B - MOD; return A + B; } inline int sub(int A, int B){ if(A - B < 0) return A - B + MOD; return A - B; } inline int mul(int A, int B){ return (ll)A * B % MOD; } int n, q, A[N], B[N], P[N][ALP], gran[N][2]; vector < int > ubac[N][2]; set < int > S[2]; int main(){ scanf("%d%d", &n, &q); for(int i = 0;i < q;i++){ scanf("%d%d", A + i, B + i); ubac[max(A[i], B[i])][A[i] < B[i]].PB(min(A[i], B[i])); } S[0].insert(0); S[1].insert(0); for(int i = n;i >= 1;i--){ for(int k = 0;k < 2;k++){ for(int x : ubac[i][k]) S[k].insert(x); while(*S[k].rbegin() == i) S[k].erase(*S[k].rbegin()); } gran[i][0] = *S[0].rbegin(); gran[i][1] = *S[1].rbegin(); } for(int j = 0;j < 26;j++) P[1][j] = 1; for(int i = 2;i <= n;i++){ int sve = max(gran[i][0], gran[i][1]); //printf("%d %d\n", ubac[i][0], ubac[i][1]); int uk = 0; for(int j = 0;j < 26;j++) uk = add(uk, sub(P[i - 1][j], P[sve][j])); for(int j = 0;j < 26;j++) P[i][j] = sub(uk, sub(P[i - 1][j], P[sve][j])); if(gran[i][0] > gran[i][1]){ // > uk = 0; for(int j = 25;j >= 0;j--){ P[i][j] = add(P[i][j], uk); uk = add(uk, sub(P[gran[i][0]][j], P[gran[i][1]][j])); } } else if(gran[i][0] < gran[i][1]){ // < uk = 0; for(int j = 0;j < 26;j++){ P[i][j] = add(P[i][j], uk); uk = add(uk, sub(P[gran[i][1]][j], P[gran[i][0]][j])); } } for(int j = 0;j < 26;j++){ P[i][j] = add(P[i - 1][j], P[i][j]); } } int uk = 0; for(int j = 0;j < 26;j++) uk = add(uk, P[n][j]); printf("%d\n", uk); return 0; }

Compilation message (stderr)

misspelling.cpp: In function 'int main()':
misspelling.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |  scanf("%d%d", &n, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~
misspelling.cpp:39:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |   scanf("%d%d", A + i, B + i);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#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...