QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#226564#4429. Gebyte's Grinducup-team1004AC ✓2397ms271428kbC++143.1kb2023-10-26 08:02:352023-10-26 08:02:36

Judging History

你现在查看的是最新测评结果

  • [2023-10-26 08:02:36]
  • 评测
  • 测评结果:AC
  • 用时:2397ms
  • 内存:271428kb
  • [2023-10-26 08:02:35]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template<typename T>
ostream& operator << (ostream &out,const vector<T> &x){
	if(x.empty())return out<<"[]";
	out<<'['<<x[0];
	for(int i=1,len=x.size();i<len;i++)out<<','<<x[i];
	return out<<']';
}
template<typename T>
vector<T> ary(const T *a,int l,int r){
	return vector<T>{a+l,a+1+r};
}
template<typename T>
void debug(T x){
	cerr<<x<<endl;
}
template<typename T,typename ... S>
void debug(T x,S...y){
	cerr<<x<<' ',debug(y...);
}
const int N=2e6+10;
const ll INF=4e18;
int T,n,m;
struct zj{
	int flag;
	ll x,y,z;
	zj(int f=0,ll a=0,ll b=0,ll c=0):flag(f),x(a),y(b),z(c){}
	void B(ll b){
		if(flag==1){
			if(y-=b,y<=0)x=INF;
		}else{
			if(z+=b,z>=y)x=max(x,z+1);
		}
	}
	void D(ll d){
		if(flag==1){
			if(y<d)x=INF;
		}else{
			if(y-z<d)x=max(x,d+z);
		}
	}
	void P(ll p){
		if(flag==1){
			y=p;
		}else{
			*this=zj(1,x,p);
		}
	}
	void K(ll k){
		D(k+1),P(k);
	}
	void C(ll c){
		if(flag==1){
			y=max(y,c);
		}else{
			if(y-z<c)y=z+c;
		}
	}
	zj operator += (const zj &a){
		if(a.flag==1)D(a.x),P(a.y);
		else D(a.x),C(a.y),B(a.z);
		return *this;
	}
	zj operator + (const zj &a)const{
		return zj(*this)+=a;
	}
	ll trs(ll H)const{
		if(flag==1){
			if(H<x)return -INF;
			else return y;
		}else{
			if(H<x)return -INF;
			H=max(H,y);
			if(H<=z)return -INF;
			return H-z;
		}
	}
};
ostream& operator << (ostream &out,const zj &x){
	return out<<'('<<x.flag<<':'<<x.x<<','<<x.y<<','<<x.z<<')';
}
zj B(ll b){
	return zj(2,b+1,0,b);
}
zj K(ll k){
	return zj(1,k,k);
}
zj C(ll c){
	return zj(2,0,c,0);
}
zj t[N<<2];
void pushup(int rt){
	t[rt]=t[rt<<1]+t[rt<<1|1];
}
char o[N],chr[5];
ll H,v[N];
zj calc(int i){
	if(o[i]=='B')return B(v[i]);
	else if(o[i]=='K')return K(v[i]);
	else return C(v[i]);
}
void build(int l=1,int r=n,int rt=1){
	if(l==r){
		t[rt]=calc(l);
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	pushup(rt);
	// debug(l,r,t[rt]);
}
void update(int x,int l=1,int r=n,int rt=1){
	if(l==r){
		t[rt]=calc(x);return;
	}
	int mid=(l+r)>>1;
	if(x<=mid)update(x,l,mid,rt<<1);
	else update(x,mid+1,r,rt<<1|1);
	pushup(rt);
}
// int TT;
int query(int L,int R,ll &H,int l=1,int r=n,int rt=1){
	// TT++;
	if(L<=l&&r<=R){
		if(t[rt].trs(H)>0){
			return H=t[rt].trs(H),0;
		}else if(l==r)return l;
	}
	int mid=(l+r)>>1,s=0;
	if(L<=mid)s=query(L,R,H,l,mid,rt<<1);
	if(s)return s;
	if(mid<R)s=query(L,R,H,mid+1,r,rt<<1|1);
	return s;
}
void get(){
	scanf("%d%d%lld",&n,&m,&H);
	for(int i=1;i<=n;i++){
		scanf("%s%lld",chr,&v[i]),o[i]=chr[0];
	}
	build();
	// for(int i=1;i<=7;i++){
	// 	debug(i,t[i]);
	// }
	int Tt=0;
	for(int x;m--;){
		scanf("%s%d",chr,&x);
		if(chr[0]=='Z'){
			scanf("%s%lld",chr,&v[x]);
			o[x]=chr[0];
			update(x);
		}else{
			ll res=H;
			int ans=query(x,n,res);
			if(!ans)ans=n+1;
			printf("%d\n",ans>x?ans-1:-1);
			// if(++Tt%10000==0)debug(Tt,1.0*TT/Tt);
		}
	}
}
int main(){
	for(scanf("%d",&T);T--;)get();
	debug(1.0*clock()/CLOCKS_PER_SEC);
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 2311ms
memory: 271348kb

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: 2397ms
memory: 271360kb

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: 2170ms
memory: 271428kb

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: 541ms
memory: 257012kb

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