제출 #97788

#제출 시각아이디문제언어결과실행 시간메모리
97788Alexa2001Bubble Sort 2 (JOI18_bubblesort2)C++17
100 / 100
7226 ms114056 KiB
#include "bubblesort2.h"
#include <bits/stdc++.h>

#define mid ((st+dr)>>1)
#define left_son (node<<1)
#define right_son ((node<<1)|1)

using namespace std;

const int Nmax = 1e6 + 5, lim = 1e6, inf = 1e6;
typedef long long ll;

ll a[Nmax], val[Nmax];

class SegmentTree
{
    int lazy[Nmax<<2], a[Nmax<<2];

public:
    void add(int node, int st, int dr, int L, int R, int Add)
    {
        if(L <= st && dr <= R)
        {
            lazy[node] += Add;
            return;
        }

        if(L <= mid) add(left_son, st, mid, L, R, Add);
        if(mid < R) add(right_son, mid+1, dr, L, R, Add);

        a[node] = max(a[left_son] + lazy[left_son], a[right_son] + lazy[right_son]);
    }
    int query()
    {
        return a[1] + lazy[1];
    }
    void init(int node, int st, int dr)
    {
        a[node] = -inf; lazy[node] = 0;
        if(st == dr) return;
        init(left_son, st, mid); init(right_son, mid+1, dr);
    }

} aint;

vector<int> countScans(vector<int> A, vector<int> X, vector<int> V)
{
    int N = A.size(), i;
    int Q = V.size();
    map<ll, int> mp;

    for(i=0; i<N; ++i) a[i] = (ll) lim * A[i] + i;
    for(i=0; i<Q; ++i) val[i] = (ll) lim * V[i] + X[i];

    for(i=0; i<N; ++i) mp[a[i]] = 1;
    for(i=0; i<Q; ++i) mp[val[i]] = 1;
    int cnt = 0;
    for(auto &it : mp) it.second = ++cnt;

    aint.init(1, 1, cnt);

    for(i=0; i<N; ++i)
    {
        int pos = mp[a[i]];
        aint.add(1, 1, cnt, pos, pos, +inf+i);
        aint.add(1, 1, cnt, 1, pos, +1);
    }

    vector<int> answer(Q);
    for(i=0; i<Q; ++i)
    {
        int pos = mp[a[X[i]]];
        aint.add(1, 1, cnt, 1, pos, -1);
        aint.add(1, 1, cnt, pos, pos, -inf-X[i]);

        a[X[i]] = val[i];
        int act = mp[val[i]];
        aint.add(1, 1, cnt, act, act, +inf+X[i]);
        aint.add(1, 1, cnt, 1, act, 1);

        answer[i] = aint.query() - N;
    }
    return answer;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...