Submission #930235

# Submission time Handle Problem Language Result Execution time Memory
930235 2024-02-19T07:14:07 Z Wansur Sequence (APIO23_sequence) C++17
20 / 100
519 ms 49812 KB
#include <bits/stdc++.h>
#define f first
#define s second
#define ent '\n'

using namespace std;
typedef long long ll;
const int mxn=5e5+12;
const int mod=998244353;

vector<int> g[mxn];
int p[mxn*4];
int mn[mxn*4];
int mx[mxn*4];

void build(int v,int tl,int tr){
	p[v]=0;
	if(tl==tr){
		mn[v]=mx[v]=tl;
	}
	else{
		int mid=tl+tr>>1;
		build(v*2,tl,mid);
		build(v*2+1,mid+1,tr);
		mn[v]=min(mn[v*2],mn[v*2+1]);
		mx[v]=max(mx[v*2],mx[v*2+1]);
	}
}

void push(int v,int tl,int tr){
	if(tl==tr){
		return;
	}
	mn[v*2]+=p[v];
	mn[v*2+1]+=p[v];
	p[v*2]+=p[v];
	p[v*2+1]+=p[v];
	mx[v*2]+=p[v];
	mx[v*2+1]+=p[v];
	p[v]=0;
}

void upd(int v,int tl,int tr,int l,int r,int x){
	push(v,tl,tr);
	if(tl>r || l>tr)return;
	if(tl>=l && tr<=r){
		mn[v]+=x;
		mx[v]+=x;
		p[v]+=x;
		return;
	}
	int mid=tl+tr>>1;
	upd(v*2,tl,mid,l,r,x);
	upd(v*2+1,mid+1,tr,l,r,x);
	mn[v]=min(mn[v*2],mn[v*2+1]);
	mx[v]=max(mx[v*2],mx[v*2+1]);
}

pair<int,int> get(int v,int tl,int tr,int l,int r){
	push(v,tl,tr);
	if(tl>r || l>tr)return {1e9,-1e9};
	if(tl>=l && tr<=r){
		return {mn[v],mx[v]};
	}
	int mid=tl+tr>>1;
	pair<int,int> x=get(v*2,tl,mid,l,r),y=get(v*2+1,mid+1,tr,l,r);
	return {min(x.f,y.f),max(x.s,y.s)};
}

int sequence(int n, std::vector<int> A){
	vector<int> a={0};
	for(int x:A){
		a.push_back(x);
	}
	for(int i=1;i<=n;i++){
		g[a[i]].push_back(i);
	}
	for(int i=1;i<=n;i++){
		upd(1,0,n,i,n,1);
	}
	int ans=1;
	for(int x=1;x<=n;x++){
		for(int i=0;i<g[x].size();i++){
			int l=g[x][i];
			pair<int,int> L=get(1,0,n,0,l-1);
			while(i+ans<g[x].size()){
				int r=g[x][i+ans];
				pair<int,int> R=get(1,0,n,r,n);
				R.f-=(ans+1)*2; 
				if(max(L.f,R.f)<=min(L.s,R.s)){
					ans++;
				}
				else break;
			}
			upd(1,0,n,l,n,-2);
		}
	}
	return ans;
}

Compilation message

sequence.cpp: In function 'void build(int, int, int)':
sequence.cpp:22:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |   int mid=tl+tr>>1;
      |           ~~^~~
sequence.cpp: In function 'void upd(int, int, int, int, int, int)':
sequence.cpp:52:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   52 |  int mid=tl+tr>>1;
      |          ~~^~~
sequence.cpp: In function 'std::pair<int, int> get(int, int, int, int, int)':
sequence.cpp:65:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   65 |  int mid=tl+tr>>1;
      |          ~~^~~
sequence.cpp: In function 'int sequence(int, std::vector<int>)':
sequence.cpp:83:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |   for(int i=0;i<g[x].size();i++){
      |               ~^~~~~~~~~~~~
sequence.cpp:86:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |    while(i+ans<g[x].size()){
      |          ~~~~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 4 ms 14940 KB Output is correct
4 Correct 4 ms 14936 KB Output is correct
5 Correct 3 ms 14936 KB Output is correct
6 Incorrect 3 ms 14940 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 4 ms 14940 KB Output is correct
4 Correct 4 ms 14936 KB Output is correct
5 Correct 3 ms 14936 KB Output is correct
6 Incorrect 3 ms 14940 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Correct 474 ms 43968 KB Output is correct
3 Correct 425 ms 44224 KB Output is correct
4 Correct 441 ms 36568 KB Output is correct
5 Correct 428 ms 43200 KB Output is correct
6 Correct 424 ms 43136 KB Output is correct
7 Correct 396 ms 36492 KB Output is correct
8 Correct 412 ms 36676 KB Output is correct
9 Correct 442 ms 37124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Incorrect 454 ms 38864 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 509 ms 49812 KB Output is correct
2 Correct 519 ms 49748 KB Output is correct
3 Correct 509 ms 49092 KB Output is correct
4 Correct 518 ms 49348 KB Output is correct
5 Correct 487 ms 45764 KB Output is correct
6 Correct 486 ms 45952 KB Output is correct
7 Correct 453 ms 44736 KB Output is correct
8 Correct 454 ms 44480 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 4 ms 14940 KB Output is correct
4 Correct 4 ms 14936 KB Output is correct
5 Correct 3 ms 14936 KB Output is correct
6 Incorrect 3 ms 14940 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 14940 KB Output is correct
2 Correct 4 ms 14940 KB Output is correct
3 Correct 4 ms 14940 KB Output is correct
4 Correct 4 ms 14936 KB Output is correct
5 Correct 3 ms 14936 KB Output is correct
6 Incorrect 3 ms 14940 KB Output isn't correct
7 Halted 0 ms 0 KB -