QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#524366#8006. Dinosaur Bones Diggingsolar_expressWA 2ms12000kbC++141.6kb2024-08-19 16:27:312024-08-19 16:27:31

Judging History

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

  • [2024-08-19 16:27:31]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:12000kb
  • [2024-08-19 16:27:31]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define MA 1200000
int n,q;
int o[MA];
struct ASK{
	int l,r;
}ak[MA];
int lr[MA][2],lrtop;
int L[MA],R[MA];
int tree[4000000],lazy[4000000];
bool cmp(ASK x,ASK y){
	return (x.l==y.l)? (x.r>y.r):(x.l<y.l);
}
void add_lr(int l,int r){
	lrtop++;
	lr[lrtop][0]=l;
	lr[lrtop][1]=r;
}
void init(){
	int zz=ak[1].r;
	add_lr(ak[1].l,ak[1].r);
	for(int i=2;i<=q;i++){
		if(ak[i].r>zz){
			zz=ak[i].r;
			add_lr(ak[i].l,ak[i].r);
		}
	}
	zz=1;
	for(int i=1;i<=n;i++){
		while(zz<lrtop&&lr[zz][1]<i)zz++;
		L[i]=zz;
	}
	zz=lrtop;
	for(int i=n;i;i--){
		while(zz>1&&lr[zz][0]>i)zz--;
		R[i]=zz;
	}
}
void add(int l,int r,int k,int x,int y){
	if(x<=l&&r<=y){tree[k]++;lazy[k]++;return ;}
	int mid=(l+r)>>1;
	if(x<=mid)add(l,mid,k<<1,x,y);
	if(y>mid)add(mid+1,r,k<<1|1,x,y);
	tree[k]=lazy[k]+max(tree[k<<1],tree[k<<1|1]);
	return ;
}
int ask(int l,int r,int k,int x,int y){
	if(x<=l&&r<=y)return tree[k];
	int mid=(l+r)>>1,RE=0;
	if(x<=mid)RE=max(RE,ask(l,mid,k<<1,x,y));
	if(y>mid)RE=max(RE,ask(mid+1,r,k<<1|1,x,y));
	return RE+lazy[k];
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%lld",&o[i]);
	}
	cin>>q;
	for(int i=1;i<=q;i++){
		scanf("%lld%lld",&ak[i].l,&ak[i].r);
	}
	sort(ak+1,ak+1+q,cmp);
	init();
	for(int i=1;i<=n;i++){
		ak[i].l=o[i];
		ak[i].r=i;
	}
	sort(ak+1,ak+1+n,cmp);
	int ans=0;
	for(int i=n;i;i--){
		int zz=ak[i].r;
		if(L[zz]>R[zz])continue;
		ans=max(ans,ak[i].l*ask(1,n,1,L[zz],R[zz]));
		add(1,n,1,L[zz],R[zz]);
	}
	cout<<ans<<endl;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 11956kb

input:

6
3 5 2 7 4 6
2
1 5
3 6

output:

9

result:

ok answer is '9'

Test #2:

score: 0
Accepted
time: 2ms
memory: 12000kb

input:

1
100
1
1 1

output:

0

result:

ok answer is '0'

Test #3:

score: -100
Wrong Answer
time: 0ms
memory: 11884kb

input:

20
451541695 690066663 673479208 448269517 560111835 982439295 929007403 955125568 735150915 829197546 256554877 435297385 348361716 763574893 202875223 881879899 590527232 256896900 31383620 400212120
5
4 8
4 17
11 13
19 20
17 18

output:

5658866005

result:

wrong answer expected '4480894680', found '5658866005'