Submission #62815378


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll t[400000];

void update(int v, int tl, int tr, int pos, int new_val) {
    if (tl == tr) {
        t[v] = new_val;
    } else {
        int tm = (tl + tr) / 2;
        if (pos <= tm)
            update(v*2, tl, tm, pos, new_val);
        else
            update(v*2+1, tm+1, tr, pos, new_val);
        t[v] = max(t[v*2], t[v*2+1]);
    }
}

int query(int v, int tl, int tr, int l, int r) {
    if (l > r) 
        return 0;
    if (l == tl && r == tr) {
        return t[v];
    }
    int tm = (tl + tr) / 2;
    return max(query(v*2, tl, tm, l, min(r, tm)),
               query(v*2+1, tm+1, tr, max(l, tm+1), r));
}

void solve() {
    ll n, q;
    cin >> n >> q;
    map<ll, vector<ll>> mp;
    vector<ll> v(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
        mp[v[i]].push_back(i);
    }
    vector<pair<ll, ll> > queries;
    map<ll, vector<ll> > mpq;
    set<ll> st;
    for(int i=1;i<=q;i++) {
        ll r, x;
        cin>>r>>x;
        queries.push_back({r, x});
        mpq[x].push_back(r);
        st.insert(x);
    }
    map<pair<ll, ll>,  ll> dp;
    for(auto it:mp) {
        ll x = it.first;
        map<ll, ll> temp;
        // cout<<"x = "<<x<<endl;
        for(auto bt:it.second) {
            ll pos = bt;
            // cout<<pos<<" ";
            ll val = query(1, 1, n, 1, pos-1);
            temp[pos] = val + 1;
        }
        while(st.size() and *st.begin() < x) {
            ll y = *st.begin();
            st.erase(st.begin());
            ll ans = 0;
            for(auto r:mpq[y]) {
                ans = query(1, 1, n, 1, r);
                dp[{r, y}] = ans;
            }
        }
        // cout<<endl;
        for(auto bt:it.second) {
            ll pos = bt;
            update(1, 1, n, pos, temp[pos]);
        }
        while(st.size() and *st.begin() <= x) {
            ll y = *st.begin();
            st.erase(st.begin());
            ll ans = 0;
            for(auto r:mpq[y]) {
                ans = query(1, 1, n, 1, r);
                dp[{r, y}] = ans;
            }
        }
        
        // for(int i=1;i<=n;i++) {
        //     cout<<query(1, 1, n, i, i)<<" ";
        // }
        // cout << endl;
    }

    while(st.size()) {
        ll y = *st.begin();
        st.erase(st.begin());
        ll ans = 0;
        for(auto r:mpq[y]) {
            ans = query(1, 1, n, 1, r);
            dp[{r, y}] = ans;
        }
    }

    // cout<<query(1, 1, n, 1, n)<<'\n';

    for(auto it : queries) {
        ll l = it.first;
        ll r = it.second;
        // cout<<l<<" "<<r<<" ";
        cout << dp[{l, r}] << "\n";
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t=1;
    // cin>>t;
    for(int i=1;i<=t;i++) {
        // cout<<"Case #"<<i<<": ";
        solve();
    }
    return 0;
}

Submission Info

Submission Time
Task F - Prefix LIS Query
User tanvirtareq
Language C++ 17 (gcc 12.2)
Score 0
Code Size 2998 Byte
Status RE
Exec Time 415 ms
Memory 63128 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 500
Status
AC × 2
AC × 6
RE × 31
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 02_random2_00.txt, 02_random2_01.txt, 02_random2_02.txt, 02_random2_03.txt, 02_random2_04.txt, 03_random3_00.txt, 03_random3_01.txt, 03_random3_02.txt, 03_random3_03.txt, 03_random3_04.txt, 03_random3_05.txt, 03_random3_06.txt, 03_random3_07.txt, 03_random3_08.txt, 03_random3_09.txt, 04_handmade_00.txt, 04_handmade_01.txt, 04_handmade_02.txt, 04_handmade_03.txt, 04_handmade_04.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3488 KiB
00_sample_01.txt AC 1 ms 3452 KiB
01_random_00.txt AC 1 ms 3492 KiB
01_random_01.txt AC 376 ms 50116 KiB
01_random_02.txt RE 180 ms 26700 KiB
01_random_03.txt RE 138 ms 22408 KiB
01_random_04.txt AC 273 ms 37160 KiB
01_random_05.txt AC 363 ms 43460 KiB
01_random_06.txt RE 374 ms 61024 KiB
01_random_07.txt RE 371 ms 61060 KiB
01_random_08.txt RE 376 ms 61132 KiB
01_random_09.txt RE 369 ms 61028 KiB
01_random_10.txt RE 378 ms 61092 KiB
01_random_11.txt RE 368 ms 61036 KiB
01_random_12.txt RE 379 ms 61116 KiB
01_random_13.txt RE 384 ms 61112 KiB
01_random_14.txt RE 397 ms 61120 KiB
02_random2_00.txt RE 415 ms 61100 KiB
02_random2_01.txt RE 379 ms 61076 KiB
02_random2_02.txt RE 392 ms 61028 KiB
02_random2_03.txt RE 361 ms 60992 KiB
02_random2_04.txt RE 348 ms 61008 KiB
03_random3_00.txt RE 327 ms 61160 KiB
03_random3_01.txt RE 313 ms 61032 KiB
03_random3_02.txt RE 305 ms 61148 KiB
03_random3_03.txt RE 310 ms 61220 KiB
03_random3_04.txt RE 293 ms 61040 KiB
03_random3_05.txt RE 343 ms 61064 KiB
03_random3_06.txt RE 329 ms 61048 KiB
03_random3_07.txt RE 347 ms 61156 KiB
03_random3_08.txt RE 335 ms 61064 KiB
03_random3_09.txt RE 360 ms 61220 KiB
04_handmade_00.txt RE 144 ms 19492 KiB
04_handmade_01.txt RE 343 ms 54176 KiB
04_handmade_02.txt RE 147 ms 33552 KiB
04_handmade_03.txt RE 146 ms 33424 KiB
04_handmade_04.txt RE 352 ms 63128 KiB