Submission #791378

#TimeUsernameProblemLanguageResultExecution timeMemory
791378otariusExam (eJOI20_exam)C++17
0 / 100
311 ms398008 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <cstring>
#include <queue>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std;

#define ff first
#define sc second
#define pb push_back
#define ll long long
#define pll pair<ll, ll>
#define pii pair <int, int>
#define ull unsigned long long

// #define int long long
// #define int unsigned long long

const ll inf = 1e9 + 7;
const ll weirdMod = 998244353;

map<int, int> mp; int rnk = 0;
int pref[5001][10000], dp[5001];
void solve() {
    int n;
    cin >> n;
    set<int> st;
    int a[n + 1], b[n + 1];
    for (int i = 1; i <= n; i++) {
        cin >> a[i]; st.insert(a[i]);
    } for (int i = 1; i <= n; i++) {
        cin >> b[i]; st.insert(b[i]);
    } for (int v : st) mp[v] = rnk++;
    if (n > 5000) {
        bool flg = 1;
        for (int i = 2; i <= n; i++) {
            if (b[i] != b[i - 1]) {
                flg = 0; break;
            }
        } if (flg) {
            int ans = 0, cur = 0; bool flg = 0;
            for (int i = 1; i <= n; i++) {
                while (a[i] <= b[i] && i <= n) {
                    if (a[i] == b[i]) flg = 1;
                    cur++; i++;
                } if (flg) ans += cur;
            }
            cout << ans;
            return;
        }
    }
    for (int i = 1; i <= n; i++) {
        a[i] = mp[a[i]]; b[i] = mp[b[i]];
        for (int j = 0; j < 10000; j++) {
            pref[i][j] = pref[i - 1][j];
        } pref[i][b[i]]++;
    } for (int j = 1; j <= n; j++) {
        int mx = -1;
        for (int i = j; i >= 1; i--) {
            mx = max(mx, a[i]);
            dp[j] = max(dp[j], dp[i - 1] + pref[j][mx] - pref[i - 1][mx]);
        }
    } int mx = 0;
    for (int i = 1; i <= n; i++)
        cout << dp[i] << ' ';
}
int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
        cout << '\n';
    }
    return 0;
}

Compilation message (stderr)

exam.cpp: In function 'void solve()':
exam.cpp:67:11: warning: unused variable 'mx' [-Wunused-variable]
   67 |     } int mx = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...