Submission #46592194


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(),(v).end()
#define pb(a) push_back(a)
#define rep(i, n) for(int i=0;i<n;i++)
#define foa(e, v) for(auto& e : v)
using ll = long long;
const ll MOD7 = 1000000007, MOD998 = 998244353, INF = (1LL << 60);
#define dout(a) cout<<fixed<<setprecision(10)<<a<<endl;

template <typename Key, typename Val>
struct HashMap {
  using u32 = uint32_t;
  using u64 = uint64_t;

  u32 cap, s;
  vector<Key> keys;
  vector<Val> vals;
  vector<bool> flag;
  u64 r;
  u32 shift;
  Val DefaultValue;

  static u64 rng() {
    u64 m = chrono::duration_cast<chrono::nanoseconds>(
                chrono::high_resolution_clock::now().time_since_epoch())
                .count();
    m ^= m >> 16;
    m ^= m << 32;
    return m;
  }

  void reallocate() {
    cap <<= 1;
    vector<Key> k(cap);
    vector<Val> v(cap);
    vector<bool> f(cap);
    u32 sh = shift - 1;
    for (int i = 0; i < (int)flag.size(); i++) {
      if (flag[i]) {
        u32 hash = (u64(keys[i]) * r) >> sh;
        while (f[hash]) hash = (hash + 1) & (cap - 1);
        k[hash] = keys[i];
        v[hash] = vals[i];
        f[hash] = 1;
      }
    }
    keys.swap(k);
    vals.swap(v);
    flag.swap(f);
    --shift;
  }

  explicit HashMap()
      : cap(8),
        s(0),
        keys(cap),
        vals(cap),
        flag(cap),
        r(rng()),
        shift(64 - __lg(cap)),
        DefaultValue(Val()) {}

  Val& operator[](const Key& i) {
    u32 hash = (u64(i) * r) >> shift;
    while (true) {
      if (!flag[hash]) {
        if (s + s / 4 >= cap) {
          reallocate();
          return (*this)[i];
        }
        keys[hash] = i;
        flag[hash] = 1;
        ++s;
        return vals[hash] = DefaultValue;
      }
      if (keys[hash] == i) return vals[hash];
      hash = (hash + 1) & (cap - 1);
    }
  }

  // exist -> return pointer of Val
  // not exist -> return nullptr
  const Val* find(const Key& i) const {
    u32 hash = (u64(i) * r) >> shift;
    while (true) {
      if (!flag[hash]) return nullptr;
      if (keys[hash] == i) return &(vals[hash]);
      hash = (hash + 1) & (cap - 1);
    }
  }

  // return vector< pair<const Key&, val& > >
  vector<pair<Key, Val>> enumerate() const {
    vector<pair<Key, Val>> ret;
    for (u32 i = 0; i < cap; ++i)
      if (flag[i]) ret.emplace_back(keys[i], vals[i]);
    return ret;
  }

  int size() const { return s; }

  // set default_value
  void set_default(const Val& val) { DefaultValue = val; }
};

template <typename S, typename T>
struct DynamicFenwickTree {
  S N;
  HashMap<S, T> data;
  explicit DynamicFenwickTree() = default;
  explicit DynamicFenwickTree(S size) { N = size + 1; }

  void add(S k, T x) {
    for (++k; k < N; k += k & -k) data[k] += x;
  }

  // [0, k)
  T sum(S k) const {
    if (k < 0) return 0;
    T ret = T();
    for (; k > 0; k -= k & -k) {
      const T* p = data.find(k);
      ret += p ? *p : T();
    }
    return ret;
  }

  // [a, b)
  T sum(S a, S b) const { return sum(b) - sum(a); }

  T operator[](S k) const { return sum(k + 1) - sum(k); }

  S lower_bound(T w) {
    if (w <= 0) return 0;
    S x = 0;
    for (S k = 1 << __lg(N); k; k >>= 1) {
      if (x + k <= N - 1 && data[x + k] < w) {
        w -= data[x + k];
        x += k;
      }
    }
    return x;
  }
};

template <typename T>
struct DynamicFenwickTree2D {
  using BIT = DynamicFenwickTree<int, T>;
  int N, M;
  vector<BIT*> bit;
  DynamicFenwickTree2D() = default;
  DynamicFenwickTree2D(int n, int m) : N(n + 1), M(m) {
    for (int _ = 0; _ < N; ++_) bit.push_back(new BIT(M));
  }
  
  void add(int i, int j, const T& x) {
    for (++i; i < N; i += i & -i) (*bit[i]).add(j, x);
  }

  // i = [0, n), j = [0, m)
  T sum(int n, int m) const {
    if (n < 0 || m < 0) return T();
    T ret = T();
    for (; n; n -= n & -n) ret += (*bit[n]).sum(m);
    return ret;
  }

  // i = [nl, nr), j = [ml, mr)
  T sum(int nl, int ml, int nr, int mr) const {
    T ret = T();
    while (nl != nr) {
      if (nl < nr) {
        ret += (*bit[nr]).sum(ml, mr);
        nr -= nr & -nr;
      } else {
        ret -= (*bit[nl]).sum(ml, mr);
        nl -= nl & -nl;
      }
    }
    return ret;
  }
};

int main() {
    ll n;
    cin >> n;
    DynamicFenwickTree2D<int> seg(n, n);
    rep(i, n) {
        ll a;
        cin >> a;
        seg.add(i, a - 1, 1);
    }
    int q;
    cin >> q;
    vector<int> l(q + 1, -1), r(q + 1, -1), u(q + 1, -1), d(q + 1, -1);
    l[0] = 0, r[0] = n;
    u[0] = n, d[0] = 0;
    
    for(int i = 1; i <= q; i ++) {
        int t, s, x;
        cin >> t >> s >> x;
        x --;
        l[i] = l[s];
        r[i] = r[s];
        u[i] = u[s];
        d[i] = d[s];
        if(t == 1) {
            int le = l[i] - 1, ri = r[i];
            while(ri - le > 1) {
                int mid = (ri + le) / 2;
                if(seg.sum(l[i], d[i], mid, u[i]) >= x + 1) ri = mid;
                else le = mid;
            }
            l[i] = ri;
            r[s] = ri;
        } else {
            if(x < d[i]) {
                d[s] = u[s] = 0;
            } else if(x < u[i]) {
                d[i] = x + 1;
                u[s] = x + 1;
            } else {
                d[i] = u[i] = 0;
            }
        }
        cout << seg.sum(l[i], d[i], r[i], u[i]) << endl;
    } 
    return 0;
}

Submission Info

Submission Time
Task G - Generate Arrays
User shinchan
Language C++ 20 (gcc 12.2)
Score 600
Code Size 5562 Byte
Status AC
Exec Time 4456 ms
Memory 190376 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 61
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_max_03.txt, 01_max_04.txt, 01_max_05.txt, 01_max_06.txt, 01_max_07.txt, 01_max_08.txt, 01_max_09.txt, 01_max_10.txt, 01_max_11.txt, 01_max_12.txt, 01_max_13.txt, 01_max_14.txt, 01_max_15.txt, 01_max_16.txt, 01_max_17.txt, 01_max_18.txt, 01_max_19.txt, 01_max_20.txt, 01_max_21.txt, 01_max_22.txt, 01_max_23.txt, 01_max_24.txt, 01_max_25.txt, 01_max_26.txt, 01_max_27.txt, 01_max_28.txt, 01_max_29.txt, 02_random_30.txt, 02_random_31.txt, 02_random_32.txt, 02_random_33.txt, 02_random_34.txt, 02_random_35.txt, 02_random_36.txt, 02_random_37.txt, 02_random_38.txt, 02_random_39.txt, 02_random_40.txt, 02_random_41.txt, 02_random_42.txt, 02_random_43.txt, 02_random_44.txt, 02_random_45.txt, 02_random_46.txt, 02_random_47.txt, 02_random_48.txt, 02_random_49.txt, 02_random_50.txt, 02_random_51.txt, 02_random_52.txt, 02_random_53.txt, 02_random_54.txt, 02_random_55.txt, 02_random_56.txt, 02_random_57.txt, 02_random_58.txt, 03_handmade_59.txt, 03_handmade_60.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3460 KiB
00_sample_01.txt AC 1 ms 3596 KiB
00_sample_02.txt AC 1 ms 3504 KiB
01_max_03.txt AC 3868 ms 187356 KiB
01_max_04.txt AC 3671 ms 187240 KiB
01_max_05.txt AC 3294 ms 187300 KiB
01_max_06.txt AC 4117 ms 188388 KiB
01_max_07.txt AC 3657 ms 187512 KiB
01_max_08.txt AC 3668 ms 187276 KiB
01_max_09.txt AC 3103 ms 187244 KiB
01_max_10.txt AC 3504 ms 187512 KiB
01_max_11.txt AC 3788 ms 188384 KiB
01_max_12.txt AC 3897 ms 187360 KiB
01_max_13.txt AC 797 ms 186512 KiB
01_max_14.txt AC 795 ms 186572 KiB
01_max_15.txt AC 800 ms 186544 KiB
01_max_16.txt AC 4311 ms 188152 KiB
01_max_17.txt AC 4085 ms 189212 KiB
01_max_18.txt AC 3923 ms 188116 KiB
01_max_19.txt AC 4011 ms 190376 KiB
01_max_20.txt AC 3452 ms 188328 KiB
01_max_21.txt AC 4211 ms 189104 KiB
01_max_22.txt AC 3619 ms 188148 KiB
01_max_23.txt AC 3424 ms 188304 KiB
01_max_24.txt AC 4456 ms 187856 KiB
01_max_25.txt AC 3460 ms 188328 KiB
01_max_26.txt AC 3428 ms 189428 KiB
01_max_27.txt AC 3215 ms 188888 KiB
01_max_28.txt AC 2369 ms 188864 KiB
01_max_29.txt AC 2198 ms 188848 KiB
02_random_30.txt AC 686 ms 113412 KiB
02_random_31.txt AC 2018 ms 168884 KiB
02_random_32.txt AC 1573 ms 51084 KiB
02_random_33.txt AC 196 ms 16496 KiB
02_random_34.txt AC 743 ms 129440 KiB
02_random_35.txt AC 2663 ms 181024 KiB
02_random_36.txt AC 1243 ms 151192 KiB
02_random_37.txt AC 1328 ms 152692 KiB
02_random_38.txt AC 1393 ms 96800 KiB
02_random_39.txt AC 3090 ms 185040 KiB
02_random_40.txt AC 629 ms 165184 KiB
02_random_41.txt AC 476 ms 152420 KiB
02_random_42.txt AC 466 ms 119656 KiB
02_random_43.txt AC 216 ms 46404 KiB
02_random_44.txt AC 774 ms 67724 KiB
02_random_45.txt AC 2326 ms 153304 KiB
02_random_46.txt AC 2174 ms 103936 KiB
02_random_47.txt AC 482 ms 121248 KiB
02_random_48.txt AC 2540 ms 184700 KiB
02_random_49.txt AC 220 ms 57496 KiB
02_random_50.txt AC 1002 ms 72896 KiB
02_random_51.txt AC 1654 ms 89900 KiB
02_random_52.txt AC 3312 ms 172048 KiB
02_random_53.txt AC 387 ms 28432 KiB
02_random_54.txt AC 333 ms 37032 KiB
02_random_55.txt AC 1186 ms 93604 KiB
02_random_56.txt AC 796 ms 50816 KiB
02_random_57.txt AC 268 ms 6268 KiB
02_random_58.txt AC 267 ms 6332 KiB
03_handmade_59.txt AC 2719 ms 188916 KiB
03_handmade_60.txt AC 2159 ms 189060 KiB