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 |
|
|
| 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 |