답안 #304578

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
304578 2020-09-21T14:25:25 Z HynDuf 케이크 (CEOI14_cake) C++11
0 / 100
1426 ms 6464 KB
#include <bits/stdc++.h>

#define task "C"
#define all(v) (v).begin(), (v).end()
#define rep(i, l, r) for (int i = (l); i <= (r); ++i)
#define Rep(i, r, l) for (int i = (r); i >= (l); --i)
#define DB(X) { cerr << #X << " = " << (X) << '\n'; }
#define DB1(A, _) { cerr << #A << "[" << _ << "] = " << (A[_]) << '\n'; }
#define DB2(A, _, __) { cerr << #A << "[" << _ << "][" << __ << "] = " << (A[_][__]) << '\n'; }
#define DB3(A, _, __, ___) { cerr << #A << "[" << _ << "][" << __ << "][" << ___ << "] = " << (A[_][__][___]) << '\n'; }
#define PR(A, l, r) { cerr << '\n'; rep(_, l, r) DB1(A, _); cerr << '\n';}
#define SZ(x) ((int)(x).size())
#define pb push_back
#define eb emplace_back
#define pf push_front
#define F first
#define S second
#define by(x) [](const auto& a, const auto& b) { return a.x < b.x; } // sort(arr, arr + N, by(a));
#define next ___next
#define prev ___prev
#define y1 ___y1
#define left ___left
#define right ___right
#define y0 ___y0
#define div ___div
#define j0 ___j0
#define jn ___jn

using ll = long long;
using ld = long double;
using ull = unsigned long long;
using namespace std;
typedef pair<int, int> ii;
typedef pair<ii, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<ll> vl;
const int N = 250002;
int read(){int s=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+ch-'0',ch=getchar();}return s*f;}
char readch() {char c; do c = getchar(); while (c == '\n' || c == ' '); return c;}
template <typename T> inline void wrip(T x) {if (x > 9) wrip(x / 10); putchar(x%10 + 48); }
template <typename T> inline void writeln(T x) {if (x < 0) putchar('-'), x = -x; wrip(x); putchar('\n');}
int n, A, q, a[N], save[N];
set<ii> mxa;
bool newE[N];
int it[4 * N];
void build(int id, int l, int r)
{
    if (l == r)
    {
        it[id] = a[l];
        return;
    }
    int m = (l + r) >> 1;
    build(id << 1, l, m);
    build((id << 1) | 1, m + 1, r);
    it[id] = max(it[id << 1], it[(id << 1) | 1]);
}
void update(int id, int l, int r, int p)
{
    if (l > p || r < p) return;
    if (l == r)
    {
        it[id] = a[p];
        return;
    }
    int m = (l + r) >> 1;
    update(id << 1, l, m, p);
    update((id << 1) | 1, m + 1, r, p);
    it[id] = max(it[id << 1], it[(id << 1) | 1]);
}
int query(int id, int l, int r, int L, int R)
{
    if (l > R || r < L) return -1e9;
    if (L <= l && r <= R) return it[id];
    int m = (l + r) >> 1;
    return max(query(id << 1, l, m, L, R), query((id << 1) | 1, m + 1, r, L, R));
}
int main()
{
#ifdef HynDuf
    freopen(task".in", "r", stdin);
    //freopen(task".out", "w", stdout);
#else
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
#endif
    //cin >> n >> A;
    n = read(), A = read();
    rep(i, 1, n)
    {
        a[i] = read();
        mxa.insert({a[i], i});
        if (SZ(mxa) > 10) mxa.erase(mxa.begin());
    }
    build(1, 1, n);
    bool numE = 1;
    q = read();
    while (q--)
    {
        char t;
        int x;
        t = readch();
        x = read();
        if (t == 'E')
        {
            numE ^= 1;
            int r;
            r = read();
            vii change;
            rep(i, 1, r - 1)
            {
                auto it = mxa.end(); it--;
                if (it->S != x)
                {
                    change.pb({it->F + 1, it->S});
                    a[it->S]++;
                    update(1, 1, n, it->S);
                } else i--;
                mxa.erase(it);
            }
            auto it = mxa.lower_bound({a[x], 0});
            if (it != mxa.end() && it->F == a[x]) mxa.erase(it);
            a[x] = (change.empty() ? (mxa.rbegin()->F + 1) : (change.back().F - 1));
            change.pb({a[x], x});
            update(1, 1, n, x);

            for (ii v : change) mxa.insert(v);
            if (SZ(mxa) > 10) mxa.erase(mxa.begin());

        } else if (x > A)
        {
            int mx = query(1, 1, n, A + 1, x);
            int l = 1, r = A - 1;
            while (l <= r)
            {
                int m = (l + r) >> 1;
                int cur = (newE[m] == numE) ? save[m] : query(1, 1, n, m, A - 1);
                newE[m] = numE;
                save[m] = cur;
                if (cur > mx) l = m + 1;
                else r = m - 1;
            }
            writeln(x - l);
        } else if (x < A)
        {
            int mx = query(1, 1, n, x, A - 1);
            int l = A + 1, r = n;
            while (l <= r)
            {
                int m = (l + r) >> 1;
                int cur = (newE[m] == numE) ? save[m] : query(1, 1, n, A + 1, m);
                newE[m] = numE;
                save[m] = cur;
                if (cur > mx) r = m - 1;
                else l = m + 1;
            }
            writeln(r - x);
        } else puts("0");
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 621 ms 624 KB Output isn't correct
2 Incorrect 347 ms 512 KB Output isn't correct
3 Incorrect 401 ms 632 KB Output isn't correct
4 Incorrect 188 ms 512 KB Output isn't correct
5 Incorrect 678 ms 888 KB Output isn't correct
6 Incorrect 569 ms 888 KB Output isn't correct
7 Incorrect 437 ms 768 KB Output isn't correct
8 Incorrect 207 ms 888 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 81 ms 2808 KB Output isn't correct
2 Incorrect 62 ms 2552 KB Output isn't correct
3 Incorrect 52 ms 2552 KB Output isn't correct
4 Correct 0 ms 384 KB Output is correct
5 Incorrect 101 ms 4344 KB Output isn't correct
6 Incorrect 104 ms 4600 KB Output isn't correct
7 Incorrect 84 ms 4216 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 79 ms 576 KB Output isn't correct
2 Incorrect 60 ms 632 KB Output isn't correct
3 Incorrect 133 ms 1544 KB Output isn't correct
4 Incorrect 161 ms 1528 KB Output isn't correct
5 Incorrect 196 ms 760 KB Output isn't correct
6 Incorrect 295 ms 1784 KB Output isn't correct
7 Incorrect 225 ms 1016 KB Output isn't correct
8 Incorrect 217 ms 2296 KB Output isn't correct
9 Incorrect 1333 ms 6464 KB Output isn't correct
10 Incorrect 654 ms 1656 KB Output isn't correct
11 Incorrect 950 ms 2192 KB Output isn't correct
12 Incorrect 1382 ms 5880 KB Output isn't correct
13 Incorrect 1426 ms 6456 KB Output isn't correct