QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#108701 | #4429. Gebyte's Grind | lmeowdn | AC ✓ | 6024ms | 269356kb | C++17 | 2.9kb | 2023-05-26 12:32:03 | 2023-05-26 12:32:04 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define fi first
#define se second
#define eb emplace_back
#define popc __builtin_popcount
#define clz __builtin_clz
#define ctz __builtin_ctz
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pii> vp;
typedef long double ld;
typedef unsigned long long ull;
int read() {
int x=0,w=1; char c=getchar();
while(!isdigit(c)) {if(c=='-') w=-1; c=getchar();}
while(isdigit(c)) {x=x*10+(c-'0'); c=getchar();}
return x*w;
}
int readop() {
static char s[19]; scanf("%s",s);
if(s[0]=='B') return 1;
else if(s[0]=='K') return 2;
else if(s[0]=='C') return 3;
else if(s[0]=='Z') return 1;
else if(s[0]=='D') return 2;
else return assert(0), 0;
}
const int N=2e6+9,inf=2e18;
int n,q,H,ls[N<<1],rs[N<<1],tot=1,tmp[N],cnt,xl[N<<1],xr[N<<1];
struct info {int a,p,q;} a[N],s[N<<1];
info trans(int op,int a) {
if(op==1) return (info){1,a+1,a+1};
else if(op==2) return (info){a,a,inf};
else return (info){a,1,a};
}
info operator + (const info &x,const info &y) {
info z;
if(y.p-x.a<=0) z.p=x.p;
else z.p=y.p-x.a+x.q;
if(x.a-y.q<0) z.a=y.a, z.q=x.q-x.a+y.q;
else z.a=y.a+x.a-y.q, z.q=x.q;
if(z.a>inf) z.a=inf;
if(z.p>inf) z.p=inf;
if(z.q>inf) z.q=inf;
return z;
}
void build(int p,int l,int r) {
xl[p]=l, xr[p]=r;
if(l==r) {s[p]=a[l]; return;} int mid=l+r>>1;
build(ls[p]=++tot,l,mid), build(rs[p]=++tot,mid+1,r);
s[p]=s[ls[p]]+s[rs[p]];
}
void mdf(int p,int l,int r,int x) {
if(l==r) {s[p]=a[l]; return;} int mid=l+r>>1;
if(x<=mid) mdf(ls[p],l,mid,x); else mdf(rs[p],mid+1,r,x);
s[p]=s[ls[p]]+s[rs[p]];
}
void find(int p,int l,int r,int x,int y) {
if(l==x&&r==y) {tmp[++cnt]=p; return;}
int mid=l+r>>1;
if(y<=mid) find(ls[p],l,mid,x,mid);
else if(x>mid) find(rs[p],mid+1,r,x,y);
else find(ls[p],l,mid,x,mid),find(rs[p],mid+1,r,mid+1,y);
}
int qry(int p,int l,int r,info f) {
if(l==r) return l-1;
info g=f+s[ls[p]]; int mid=l+r>>1;
if(g.p>H) return qry(ls[p],l,mid,f);
else return qry(rs[p],mid+1,r,g);
}
int query(int l) {
cnt=0; find(1,1,n,l,n); info f=(info){0,0,0};
rep(i,1,cnt) {
int p=tmp[i]; info g=f+s[p];
if(g.p>H) return qry(p,xl[p],xr[p],f);
else f=g;
}
return n;
}
signed main() {
for(int T=read();T;T--) {
n=read(), q=read(), H=read();
rep(i,1,tot) s[i]=(info){0,0,0}, ls[i]=rs[i]=0; tot=1;
rep(i,1,n) {
int op=readop(), x=read();
a[i]=trans(op,x);
}
build(1,1,n);
rep(i,1,q) {
int opt=readop();
if(opt==1) {
int pos=read(), op=readop(), x=read();
a[pos]=trans(op,x);
mdf(1,1,n,pos);
} else {
int pos=read();
if(a[pos].p>H) puts("-1");
else printf("%lld\n",query(pos));
}
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 6024ms
memory: 269180kb
input:
1 2000000 4000000 1000000000000 B 2982992025 B 1226542907 B 2299259203 B 1223702056 B 1407121251 B 340783317 B 1259091208 B 2101980047 B 2611543443 B 2010658889 B 4233714406 B 3112120167 B 2311876255 B 2789960428 B 3008572010 B 1 B 2464951378 B 1364240867 B 2829584762 B 2511437438 B 692948679 B 1113...
output:
833302 238155 1007466 1912727 1483707 996123 913464 595444 1956432 168794 1224759 214012 1606540 541216 578117 1279590 1652446 647870 900696 1010723 1723225 1909185 765245 1770241 994028 135066 146309 423001 379625 188229 561102 1020950 25262 1007466 624537 1150303 892424 856521 175916 1187336 16896...
result:
ok 2911608 lines
Test #2:
score: 0
Accepted
time: 5073ms
memory: 269236kb
input:
1 2000000 4000000 900000000000 B 18921988072 B 1 B 162148155907 C 1000000000000 B 331992393119 K 428836058413 B 440712983778 B 534362851268 B 923013640108 B 472973869469 B 21294011490 B 1 B 1000000000000 B 76485869786 C 1000000000000 C 333159763195 B 1 B 277856669933 B 1 C 445619227450 B 86360111824...
output:
1625020 1618321 511712 1446036 1302385 244605 534722 1807821 1673978 -1 -1 1286986 650766 1419851 -1 -1 510520 -1 1996906 814567 719623 1737532 180266 285086 -1 1455059 11092 1030131 1479157 372584 399911 1897918 1585202 566085 1522965 63081 1721860 673731 1530763 -1 -1 134340 1467445 -1 1410807 -1 ...
result:
ok 1999947 lines
Test #3:
score: 0
Accepted
time: 3916ms
memory: 269356kb
input:
1 2000000 4000000 1000000000000 B 17342013 B 14555766 B 26630469 B 66103720 B 62383790 B 17433493 B 66256092 B 74496332 B 66470344 B 17971159 B 46755192 B 33871545 B 47843886 B 17737257 B 91180218 B 2450298 B 31650513 B 2066148 B 82311128 B 56600828 B 12144701 B 83637831 B 73789298 B 108092 B 684688...
output:
6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 6137 ...
result:
ok 2002501 lines
Test #4:
score: 0
Accepted
time: 529ms
memory: 3600kb
input:
100000 30 36 694566294336 B 399381235378 K 116128223667 B 571309322680 B 3999476334 C 694813305215 B 242568539922 K 275534906854 B 627467159442 C 603373692516 B 736482925501 B 857566416940 B 192161825500 B 709599212240 B 402172637373 B 400573894654 B 256573224769 B 294629292373 B 267978037726 B 7412...
output:
-1 16 21 -1 -1 23 9 7 -1 2 6 -1 24 22 -1 14 -1 26 -1 5 -1 -1 -1 14 -1 -1 6 -1 14 5 6 -1 -1 -1 -1 2 -1 7 2 -1 -1 7 11 11 11 11 11 11 11 11 11 11 11 2 7 7 11 2 -1 2 11 4 8 6 10 4 15 15 15 -1 15 8 15 -1 -1 -1 15 7 15 -1 -1 15 7 15 -1 15 7 6 6 9 -1 12 6 6 12 6 9 7 7 8 3 -1 -1 -1 5 -1 -1 13 20 11 22 -1 -...
result:
ok 927823 lines
Extra Test:
score: 0
Extra Test Passed