QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#298280 | #4429. Gebyte's Grind | PhantomThreshold# | WA | 5279ms | 203116kb | C++20 | 2.6kb | 2024-01-05 22:20:38 | 2024-01-05 22:20:39 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll lim=4.1e18;
// h <= lo -> 0
// lo < h <=hi -> c
// hi < h -> h+d
struct info
{
ll lo,hi,c,d;
info(){lo=hi=c=d=0ll;}
info(char ch,ll x)
{
if(ch=='B')
{
lo=hi=x;
c=0;
d=-x;
}
else if(ch=='K')
{
lo=x-1;
hi=lim;
c=0;
d=x;
}
else
{
lo=0;
hi=x;
c=x;
d=0;
}
}
ll eval(ll x)const
{
if(x<=lo)return -1;
if(x<=hi)return c;
return x+d;
}
info operator+(const info &t)const
{
info ret;
ret.lo=lo;
if(c<=t.lo)ret.lo=hi;
ll bound=t.lo-d;
if(bound>hi)ret.lo=bound;
ret.c=t.eval(c);
if(t.c)ret.c=t.c;
bound=t.hi-d;
if(bound>hi)ret.hi=bound;
else ret.hi=hi;
ret.d=d+t.d;
return ret;
}
};
const int maxn=4555555;
info w[maxn];
int lson[maxn],rson[maxn];
int ind,root;
char ty[maxn];
ll x[maxn];
void upd(int cur)
{
cur[w]=cur[lson][w]+cur[rson][w];
}
int build(int l,int r)
{
int ret=++ind;
if(l!=r)
{
int mid=(l+r)/2;
ret[lson]=build(l,mid);
ret[rson]=build(mid+1,r);
upd(ret);
}
else
{
ret[w]=info(ty[l],x[l]);
}
return ret;
}
void change(int cur,int l,int r,int pos)
{
if(l==r)
{
cur[w]=info(ty[pos],x[pos]);
return;
}
int mid=(l+r)/2;
if(pos<=mid)change(cur[lson],l,mid,pos);
else change(cur[rson],mid+1,r,pos);
upd(cur);
}
pair<int,ll> query(int cur,int l,int r,int pos,ll h)
{
if(pos>r)return make_pair(pos,h);
if(pos==l and cur[w].eval(h)!=-1)return make_pair(r+1,cur[w].eval(h));
if(l==r)return make_pair(l,-1);
int mid=(l+r)/2;
if(pos<=mid)
{
auto res=query(cur[lson],l,mid,pos,h);
if(res.second==-1)return res;
else return query(cur[rson],mid+1,r,mid+1,res.second);
}
return query(cur[rson],mid+1,r,pos,h);
}
void printall(int cur,int l,int r)
{
cerr<<cur<<' '<<l<<' '<<r<<' '<<cur[w].lo<<' '<<cur[w].hi<<' '<<cur[w].c<<' '<<cur[w].d<<endl;
if(l!=r)
{
int mid=(l+r)/2;
printall(cur[lson],l,mid);
printall(cur[rson],mid+1,r);
}
}
int main()
{
ios_base::sync_with_stdio(false);
int T;
cin>>T;
while(T--)
{
int n,q;
ll H;
cin>>n>>q>>H;
for(int i=1;i<=n;i++)
{
cin>>ty[i]>>x[i];
}
ty[n+1]='B';
x[n+1]=lim;
ind=0;
root=build(1,n+1);
while(q--)
{
// printall(root,1,n+1);
char op;
cin>>op;
if(op=='D')
{
int pos;
cin>>pos;
int res=query(root,1,n+1,pos,H).first;
if(res==pos)cout<<-1<<"\n";
else cout<<res-1<<"\n";
}
else
{
int pos;
cin>>pos;
cin>>ty[pos]>>x[pos];
change(root,1,n+1,pos);
}
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 5279ms
memory: 203116kb
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:
830886 237551 1006759 1911618 1482435 995020 911266 594968 1956406 163024 1222474 213379 1606414 541216 578056 1277464 1641650 645516 900256 1009146 1720986 1905355 765240 1766529 991879 134357 140608 422999 378431 188153 555268 1019521 12846 1007200 623101 1143461 887096 856018 173817 1185152 16893...
result:
wrong answer 1st lines differ - expected: '833302', found: '830886'