QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#812368#7248. Ivan DornAuroreWA 3ms16008kbC++232.9kb2024-12-13 14:48:452024-12-13 14:48:46

Judging History

This is the latest submission verdict.

  • [2024-12-13 14:48:46]
  • Judged
  • Verdict: WA
  • Time: 3ms
  • Memory: 16008kb
  • [2024-12-13 14:48:45]
  • Submitted

answer

#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int buf[105];
inline void print(int x,char ch=' '){
	if(x<0) putchar('-'),x=-x;
	int tot=0;
	do{
		buf[++tot]=x%10;
		x/=10;
	}while(x);
	for(int i=tot;i;i--) putchar(buf[i]+'0');
	putchar(ch);
}
const int MAXN=5e5+5;
int n,m,B,a[MAXN],b[MAXN];

int st[MAXN][20],lg[MAXN];
int query(int l,int r){
	int b=lg[r-l+1];
	return max(st[l][b],st[r-(1<<b)+1][b]);
}

int ans[MAXN];
int f[MAXN],g[MAXN];
struct node{
	int l,r,id;
	node(int a=0,int b=0,int c=0){
		l=a,r=b,id=c;
	}
	bool friend operator<(const node &a,const node &b){
		return a.r<b.r;
	}
};
vector<node> qry[MAXN];

#define pr(x,y) make_pair(x,y)
#define F first
#define S second
pair<int,int> pre[MAXN],suf[MAXN];
pair<int,int> tmp1[MAXN],tmp2[MAXN];
void solve(int mid){
	sort(qry[mid].begin(),qry[mid].end());
	
	int pos=mid,mx=0;
	for(auto q:qry[mid]){
		while(pos<=q.r){
			if(suf[a[pos]].S&&query(suf[a[pos]].S,pos)<=a[pos]){
				if(pre[a[pos]]==suf[a[pos]])
					pre[a[pos]].S=suf[a[pos]].S=pos;
				else
					suf[a[pos]].S=pos;
			}
			else{
				suf[a[pos]]=pr(pos,pos);
				if(!pre[a[pos]].F) pre[a[pos]]=pr(pos,pos);
			}
			mx=max(mx,suf[a[pos]].S-suf[a[pos]].F);
			pos++;
		}
		
		int cpy=mx;
		for(int i=mid-1;i>=q.l;i--)
			tmp1[a[i]]=pre[a[i]],tmp2[a[i]]=suf[a[i]];
		
		for(int i=mid-1;i>=q.l;i--){
			if(pre[a[i]].F&&query(i,pre[a[i]].F)<=a[i]){
				if(pre[a[i]]==suf[a[i]])
					pre[a[i]].F=suf[a[i]].F=i;
				else
					pre[a[i]].F=i;
			}
			else{
				pre[a[i]]=pr(i,i);
				if(!suf[a[i]].F) suf[a[i]]=pr(i,i);
			}
			mx=max(mx,pre[a[i]].S-pre[a[i]].F);
		}
		ans[q.id]=mx;
		
		mx=cpy;
		for(int i=mid-1;i>=q.l;i--)
			pre[a[i]]=tmp1[a[i]],suf[a[i]]=tmp2[a[i]];
	}
	
	for(int i=1;i<=n;i++) pre[a[i]]=suf[a[i]]=pr(0,0);
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) a[i]=b[i]=read();
	sort(b+1,b+n+1);
	for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+n+1,a[i])-b;
	
	for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
	for(int i=1;i<=n;i++) st[i][0]=a[i];
	for(int j=1;(1<<j)<=n;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
	
	B=sqrt(n);
	for(int i=1;i<=m;i++){
		int l=read(),r=read();
		if(r-l+1<=B){
			for(int j=l;j<=r;j++){
				if(f[a[j]]&&query(f[a[j]],j)<=a[j])
					g[a[j]]+=j-f[a[j]];
				f[a[j]]=j;
				ans[i]=max(ans[i],g[a[j]]);
			}
			for(int j=l;j<=r;j++)
				f[a[j]]=g[a[j]]=0;
		}
		else{
			if((l-1)%B==0) qry[l].push_back(node(l,r,i));
			else{
				int id=((l-1)/B+1)*B+1;
				qry[id].push_back(node(l,r,i));
			}
		}
	}
	
	for(int i=1;i<=n;i+=B)
		solve(i);
	
	for(int i=1;i<=m;i++) print(ans[i],'\n');
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 11828kb

input:

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

output:

4
0
0
1
4

result:

ok 5 number(s): "4 0 0 1 4"

Test #2:

score: 0
Accepted
time: 3ms
memory: 13844kb

input:

1 1
1
1 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 0
Accepted
time: 0ms
memory: 11796kb

input:

2 1
1 2
1 2

output:

0

result:

ok 1 number(s): "0"

Test #4:

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

input:

2 1
1 1
1 2

output:

1

result:

ok 1 number(s): "1"

Test #5:

score: 0
Accepted
time: 0ms
memory: 9808kb

input:

10 10
6 4 10 10 10 3 4 5 4 3
4 10
3 8
3 5
1 10
2 3
4 6
1 2
2 6
9 10
5 7

output:

1
2
2
2
0
1
0
2
0
0

result:

ok 10 numbers

Test #6:

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

input:

10 10
4 10 1 4 1 1 4 1 4 10
8 10
1 7
5 9
5 9
3 7
9 10
4 10
5 10
2 3
2 8

output:

0
3
2
2
3
0
5
2
0
3

result:

ok 10 numbers

Test #7:

score: 0
Accepted
time: 0ms
memory: 11776kb

input:

10 10
5 6 6 6 6 5 6 6 6 5
1 10
2 9
3 9
3 10
5 10
3 7
2 4
1 1
1 3
3 9

output:

7
7
6
6
4
4
2
0
1
6

result:

ok 10 numbers

Test #8:

score: 0
Accepted
time: 3ms
memory: 15872kb

input:

10 10
8 8 8 8 8 8 8 8 8 8
3 10
6 7
3 4
3 10
2 8
6 8
9 10
9 10
2 3
1 2

output:

7
1
1
7
6
2
1
1
1
1

result:

ok 10 numbers

Test #9:

score: 0
Accepted
time: 3ms
memory: 16008kb

input:

10 10
100 30 100 91 100 91 91 100 91 91
6 6
9 10
7 7
7 8
1 3
6 10
2 7
3 10
6 7
2 9

output:

0
1
0
0
2
1
2
5
1
5

result:

ok 10 numbers

Test #10:

score: 0
Accepted
time: 0ms
memory: 11920kb

input:

10 10
962186504 962186504 962186504 766659307 396032294 766659307 396032294 962186504 962186504 962186504
5 7
3 5
3 5
3 6
3 7
4 10
1 6
3 8
9 9
2 6

output:

0
0
0
2
2
2
2
5
0
2

result:

ok 10 numbers

Test #11:

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

input:

1000 1000
10 9 4 2 7 7 5 6 8 5 2 3 5 1 10 5 7 5 2 1 9 3 9 3 10 1 10 4 9 10 1 4 2 6 2 7 1 10 2 7 2 1 4 4 10 3 2 7 4 1 10 8 3 3 3 7 7 4 9 10 8 8 2 6 2 9 8 7 10 6 6 9 5 9 4 1 4 9 2 7 1 1 7 5 5 6 8 9 8 9 2 6 7 4 5 2 6 6 9 5 4 3 6 6 9 4 1 5 8 1 7 1 1 4 1 3 5 10 1 8 3 4 7 1 10 3 7 7 8 8 9 1 9 3 7 2 9 6 1 ...

output:

104
827
728
149
190
375
111
224
357
245
274
120
259
284
39
475
637
126
633
33
634
186
481
426
111
396
117
304
356
241
322
17
20
39
123
182
3
29
31
559
73
377
324
428
53
499
668
808
367
384
47
269
358
38
402
295
393
46
338
506
17
94
198
420
530
30
66
111
380
0
457
75
337
250
750
209
239
319
94
603
11...

result:

wrong answer 181st numbers differ - expected: '4', found: '5'