답안 #248839

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
248839 2020-07-13T14:31:10 Z egekabas Bubble Sort 2 (JOI18_bubblesort2) C++14
22 / 100
136 ms 52588 KB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<ll, ll> pii;
typedef pair<ld, ld> pld;
ll seg[4000009];
ll lazy[4000009];
void push(ll v){
    lazy[2*v] += lazy[v];
    lazy[2*v+1] += lazy[v];
    seg[2*v] += lazy[v];
    seg[2*v+1] += lazy[v];
    lazy[v] = 0;
}
void upd(ll v, ll tl, ll tr, ll l, ll r, ll val){
    if(r < tl || tr < l) return;
    if(l <= tl && tr <= r){
        seg[v] += val;
        lazy[v] += val;
    }
    else{
        push(v);
        upd(2*v, tl, (tl+tr)/2, l, r, val);
        upd(2*v+1, (tl+tr)/2+1, tr, l, r, val);
        seg[v] = max(seg[2*v], seg[2*v+1]);
    }
}
vector<ll> mpp;
ll get(ll x){
    return lower_bound(mpp.begin(), mpp.end(), x)-mpp.begin();
}
set<ll, greater<ll>> s[1000009];
ll n, N;
void erase(ll idx, vector<int> &a){
    if(*s[a[idx]].begin() == idx+1){
        upd(1, 0, N, a[idx], a[idx], -(idx+1));
        s[a[idx]].erase(idx+1);
        if(s[a[idx]].size())
            upd(1, 0, N, a[idx], a[idx], *s[a[idx]].begin());
    }
    else
        s[a[idx]].erase(idx+1);
    upd(1, 0, N, a[idx], N, 1);
}
void add(ll idx, vector<int> &a){
    if(idx+1 > *s[a[idx]].begin()){
        upd(1, 0, N, a[idx], a[idx], -*s[a[idx]].begin());
        upd(1, 0, N, a[idx], a[idx], (idx+1));    
    }
    s[a[idx]].insert(idx+1);
    upd(1, 0, N, a[idx], N, -1);
}
vector<int> countScans(vector<int> a, vector<int> x, vector<int> v){
    n = a.size();
    for(auto u : a)
        mpp.pb(u);
    for(auto u : v)
        mpp.pb(u);
    sort(mpp.begin(), mpp.end());
    mpp.resize(unique(mpp.begin(), mpp.end())-mpp.begin());
    N = mpp.size()-1;
    for(auto &u : a)
        u = get(u);
    for(auto &u : v)
        u = get(u);
    
    for(ll i = 0; i < n; ++i){
        s[a[i]].insert(i+1);
        upd(1, 0, N, a[i], n, -1);
    }
    for(ll i = 0; i < n; ++i)
        if(*s[a[i]].begin() == i+1){
            upd(1, 0, N, a[i], a[i], i+1);
        }
    vector<int> ans(x.size());
    for(ll i = 0; i < x.size(); ++i){
        erase(x[i], a);
        a[x[i]] = v[i];
        add(x[i], a);
        ans[i] = max(seg[1], 0LL);
    }
    return ans;
}

Compilation message

bubblesort2.cpp: In function 'std::vector<int> countScans(std::vector<int>, std::vector<int>, std::vector<int>)':
bubblesort2.cpp:84:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll i = 0; i < x.size(); ++i){
                   ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 47480 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 47480 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 49140 KB Output is correct
2 Correct 81 ms 50800 KB Output is correct
3 Correct 136 ms 52340 KB Output is correct
4 Correct 114 ms 52332 KB Output is correct
5 Correct 110 ms 52332 KB Output is correct
6 Correct 113 ms 52528 KB Output is correct
7 Correct 109 ms 52332 KB Output is correct
8 Correct 109 ms 52332 KB Output is correct
9 Correct 109 ms 52332 KB Output is correct
10 Correct 106 ms 52588 KB Output is correct
11 Correct 102 ms 52460 KB Output is correct
12 Correct 97 ms 52460 KB Output is correct
13 Correct 96 ms 52460 KB Output is correct
14 Correct 102 ms 52460 KB Output is correct
15 Correct 99 ms 52460 KB Output is correct
16 Correct 94 ms 52460 KB Output is correct
17 Correct 92 ms 52460 KB Output is correct
18 Correct 93 ms 52460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 47480 KB Output isn't correct
2 Halted 0 ms 0 KB -