QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#404472#8057. Best Carry Player 4KLPP#WA 61ms3716kbC++172.1kb2024-05-03 23:42:382024-05-03 23:42:39

Judging History

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

  • [2024-05-03 23:42:39]
  • 评测
  • 测评结果:WA
  • 用时:61ms
  • 内存:3716kb
  • [2024-05-03 23:42:38]
  • 提交

answer

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;
typedef long long int lld;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)
const int MAX=1'000'000;
const lld INF=1e18;
class ST{
	lld sumA[4*MAX];
	lld sumB[4*MAX];
	lld val[4*MAX];
	public:
	void build(int a, int b, int node){
		if(a==b){
			sumA[node]=0;
			sumB[node]=0;
			val[node]=0;
			return;
		}
		int mid=(a+b)/2;
		build(a,mid,2*node);
		build(mid+1,b,2*node+1);
		sumA[node]=sumA[2*node]+sumA[2*node+1];
		sumB[node]=sumB[2*node]+sumB[2*node+1];
		val[node]=min(val[2*node]+sumB[2*node+1],sumA[2*node]+val[2*node+1]);
	}
	void update(int a, int b, int node, int pos, pair<lld,lld> V){
		if(pos<a || b<pos)return;
		if(a==b){
			sumA[node]=V.first;
			sumB[node]=V.second;
			val[node]=min(V.first,V.second);
			return;
		}
		int mid=(a+b)/2;
		update(a,mid,2*node,pos,V);
		update(mid+1,b,2*node+1,pos,V);
		sumA[node]=sumA[2*node]+sumA[2*node+1];
		sumB[node]=sumB[2*node]+sumB[2*node+1];
		val[node]=min(val[2*node]+sumB[2*node+1],sumA[2*node]+val[2*node+1]);
	}
	lld query(){
		return val[1];
	}
};
ST S;
void solve(){
	int n;
	cin>>n;
	vector<lld> a(n);
	vector<lld> b(n);
	rep(i,0,n)cin>>a[i];
	a[0]=INF;
	rep(i,0,n)cin>>b[i];
	b[0]=INF;
	reverse(a.begin(),a.end());
	//reverse(b.begin(),b.end());
	S.build(0,n-1,1);
	rep(i,0,n){
		S.update(0,n-1,1,i,{a[i],b[i]});
	}
	int last=-1;
	lld ans=0;
	rep(i,1,n){
		if(a[i-1]>0){
			last=i-1;
		}
		if(last>-1){
			b[i]--;
			a[last]--;
			S.update(0,n-1,1,i,{a[i],b[i]});
			S.update(0,n-1,1,last,{a[last],b[last]});
			ans=max(ans,1+S.query());
			b[i]++;
			a[last]++;
			S.update(0,n-1,1,i,{a[i],b[i]});
			S.update(0,n-1,1,last,{a[last],b[last]});
		}
	}
	cout<<ans<<"\n";
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int tt=1;
	cin>>tt;
	while(tt--){
		solve();
	}
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3716kb

input:

5
2
1 2
3 4
3
1 0 1
0 1 0
4
1 0 0 1
1 1 1 1
5
123456 114514 1919810 233333 234567
20050815 998244353 0 0 0
10
5 3 5 3 2 4 2 4 1 5
9 9 8 2 4 4 3 5 3 0

output:

5
1
2
467900
29

result:

ok 5 number(s): "5 1 2 467900 29"

Test #2:

score: -100
Wrong Answer
time: 61ms
memory: 3528kb

input:

100000
5
0 1 1 1 1
0 0 1 0 0
5
0 0 0 0 0
1 1 1 0 0
5
0 0 2 1 1
0 2 1 0 1
5
0 0 0 0 0
1 2 1 0 0
5
0 1 0 1 1
0 0 1 1 1
5
2 0 0 0 1
1 0 0 0 3
5
2 0 0 1 1
0 2 1 1 1
5
0 0 0 0 2
0 0 0 0 1
5
0 0 0 0 0
0 1 1 0 0
5
4 0 0 0 0
0 0 0 1 0
5
0 0 0 0 1
2 1 1 0 0
5
0 2 3 0 0
0 0 0 1 0
5
1 1 1 0 1
1 0 1 0 1
5
0 0 0...

output:

2
0
4
0
4
3
3
2
0
0
1
1
3
0
3
1
1
0
0
0
0
0
4
1
4
1
0
2
4
3
1
5
0
0
2
0
1
1
1
0
1
3
5
3
2
2
2
0
1
2
2
2
0
4
1
2
1
1
0
1
0
4
2
2
2
2
0
3
3
0
2
0
1
0
1
2
1
2
0
3
4
0
2
5
0
2
1
1
1
0
3
2
3
0
2
0
4
3
3
0
2
2
0
1
3
1
1
0
1
0
1
0
3
2
2
0
2
1
1
1
2
0
0
2
4
1
3
3
2
2
2
0
2
0
0
2
3
1
3
1
0
2
2
3
0
1
2
0
1
1
...

result:

wrong answer 5th numbers differ - expected: '3', found: '4'