QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#818365 | #8704. 排队 | Sktn0089 | 0 | 0ms | 3676kb | C++14 | 3.2kb | 2024-12-17 19:29:54 | 2024-12-17 19:29:54 |
Judging History
answer
#include <bits/stdc++.h>
namespace Initial {
#define ll int
#define ull unsigned long long
#define fi first
#define se second
#define mkp make_pair
#define pir pair <int, int>
#define pb push_back
#define i128 __int128
using namespace std;
const ll maxn = 155, inf = 1e9, mod = 1e9 + 7;
ll power(ll a, ll b = mod - 2) {
ll s = 1;
while(b) {
if(b & 1) s = 1ll * s * a %mod;
a = 1ll * a * a %mod, b >>= 1;
} return s;
}
template <class T>
const inline ll pls(const T x, const T y) { return x + y >= mod? x + y - mod : x + y; }
template <class T>
const inline void add(T &x, const T y) { x = x + y >= mod? x + y - mod : x + y; }
template <class T>
const inline void chkmax(T &x, const T y) { x = x < y? y : x; }
template <class T>
const inline void chkmin(T &x, const T y) { x = x > y? y : x; }
} using namespace Initial;
namespace Read {
char buf[1 << 22], *p1, *p2;
// #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, (1 << 22) - 10, stdin), p1 == p2)? EOF : *p1++)
template <class T>
const inline void rd(T &x) {
char ch; bool neg = 0;
while(!isdigit(ch = getchar()))
if(ch == '-') neg = 1;
x = ch - '0';
while(isdigit(ch = getchar()))
x = (x << 1) + (x << 3) + ch - '0';
if(neg) x = -x;
}
} using Read::rd;
ll n, m; set <ll> st[maxn];
mt19937 rnd(20090623);
struct Treap {
ll fa[maxn], siz[maxn], lc[maxn], rc[maxn], dnr[maxn];
ll val[maxn], cnt[maxn];
void pushup(ll p) {
siz[p] = siz[lc[p]] + siz[rc[p]] + 1;
cnt[p] = cnt[lc[p]] + cnt[rc[p]] + val[p];
}
ll merge(ll p, ll q) {
fa[p] = fa[q] = 0;
if(!p || !q) return p | q;
if(dnr[p] < dnr[q])
return pushup(fa[rc[p] = merge(rc[p], q)] = p), p;
else
return pushup(fa[lc[q] = merge(p, lc[q])] = q), q;
}
void split(ll p, ll k, ll &x, ll &y) {
if(!p) return x = y = 0, void();
fa[p] = 0;
if(siz[lc[p]] + 1 <= k) {
split(rc[p], k - 1 - siz[lc[p]], rc[p], y);
return fa[rc[p]] = p, pushup(x = p);
} else {
split(lc[p], k, x, lc[p]);
return fa[lc[p]] = p, pushup(y = p);
}
}
ll getrk(ll p) {
ll s = siz[lc[p]] + 1;
for(ll q = p; p = fa[p]; q = p)
if(rc[p] == q) s += siz[lc[p]] + 1;
return s;
}
ll qry(ll p) {
ll s = cnt[lc[p]] + val[p];
for(ll q = p; p = fa[p]; q = p)
if(rc[p] == q) s += cnt[lc[p]] + val[p];
return s;
}
void Newnode(ll p, ll w) {
siz[p] = 1, dnr[p] = rnd(), cnt[p] = val[p] = w;
}
} tr; ll rt, f[maxn];
signed main() {
rd(n), rd(n); st[0].insert(inf);
while(n--) {
ll op, x; rd(op), rd(x);
if(op == 1) {
st[x].insert(++m), f[m] = x, st[m].insert(inf);
tr.Newnode(2 * m, 0), tr.Newnode(2 * m - 1, 1);
ll k = x? tr.getrk(2 * x - 1) : 0;
ll s1, s2; tr.split(rt, k, s1, s2);
rt = tr.merge(tr.merge(s1, tr.merge(2 * m - 1, 2 * m)), s2);
} else if(op == 2) {
ll y; rd(y);
ll k1 = tr.getrk(2 * x - 1), k2 = tr.getrk(2 * x);
ll s1, sx, s2; tr.split(rt, k2, s1, s2);
tr.split(s1, k1 - 1, s1, sx);
rt = tr.merge(s1, s2);
ll z = *st[y].upper_bound(x);
ll k = y? tr.getrk(z == inf? 2 * y - 1 : 2 * z) : 0;
tr.split(rt, k, s1, s2);
rt = tr.merge(tr.merge(s1, sx), s2);
} else {
printf("%d\n", tr.qry(2 * x - 1));
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 4
Accepted
time: 0ms
memory: 3676kb
input:
0 8 1 0 1 1 1 2 3 2 2 2 0 3 1 3 2 3 3
output:
2 3 1 2
result:
ok 4 lines
Test #2:
score: 0
Runtime Error
input:
0 485 1 0 2 1 0 2 1 0 3 1 3 1 1 0 1 1 3 3 2 3 2 2 2 1 2 2 1 2 2 0 3 1 3 1 3 1 1 0 2 3 0 1 2 3 3 1 3 2 3 2 1 1 2 2 0 1 3 2 3 0 2 1 0 1 1 2 8 6 2 3 0 3 3 2 4 1 1 4 3 2 1 0 1 5 1 4 2 3 2 2 7 4 3 5 1 7 1 8 2 7 5 3 14 3 2 2 6 2 3 13 1 0 3 11 1 13 3 1 3 4 1 4 2 15 0 2 15 9 2 17 16 3 13 1 17 2 17 12 3 3 3 ...
output:
result:
Subtask #2:
score: 0
Runtime Error
Test #5:
score: 0
Runtime Error
input:
1 298913 1 0 3 1 3 1 3 1 3 1 3 1 1 0 1 0 3 3 1 2 1 2 3 5 3 5 1 1 1 3 1 4 3 3 1 3 1 6 3 7 3 2 3 5 3 8 3 2 1 8 3 3 1 4 3 2 3 7 1 3 3 4 1 10 3 14 3 13 1 12 3 4 1 8 1 15 1 16 3 9 3 14 3 10 3 8 3 7 1 16 1 15 3 16 3 13 1 19 3 13 3 1 3 14 1 18 1 22 3 8 1 17 3 18 3 9 1 18 3 9 3 1 1 20 3 11 3 5 3 2 3 22 1 22...
output:
result:
Subtask #3:
score: 0
Runtime Error
Test #20:
score: 0
Runtime Error
input:
2 298235 1 0 1 1 3 2 1 0 1 3 3 4 3 3 3 3 3 2 3 4 3 2 3 3 1 2 3 3 1 4 1 2 1 1 3 5 3 8 1 5 1 9 3 10 3 8 3 10 3 5 3 8 3 5 1 2 1 9 3 5 3 7 3 12 3 3 1 6 3 4 3 3 3 11 3 8 3 9 3 7 3 6 3 4 1 12 1 11 3 13 3 13 1 11 3 16 3 6 3 14 3 9 3 5 3 13 1 9 1 17 3 16 3 13 3 5 3 15 3 8 3 4 3 13 1 18 3 15 3 16 3 19 3 4 1 ...
output:
result:
Subtask #4:
score: 0
Runtime Error
Test #35:
score: 0
Runtime Error
input:
3 299743 1 0 1 1 3 1 1 2 3 2 1 0 3 3 3 2 3 1 3 2 2 2 1 3 3 3 3 3 4 3 1 3 2 3 2 2 1 0 3 2 3 1 3 1 1 0 3 2 1 2 1 1 3 2 2 5 2 1 6 1 0 2 5 2 1 7 3 8 3 5 3 5 2 7 5 2 9 4 3 5 3 8 2 6 2 2 3 0 2 2 0 1 1 2 3 1 1 8 2 7 0 3 3 1 12 2 13 9 1 5 2 2 1 2 14 13 1 12 2 1 0 2 12 10 2 15 12 1 0 1 6 3 6 2 3 2 2 17 6 3 4...
output:
result:
Subtask #5:
score: 0
Skipped
Dependency #1:
0%