Submission #930229

# Submission time Handle Problem Language Result Execution time Memory
930229 2024-02-19T06:51:15 Z Wansur Sequence (APIO23_sequence) C++17
7 / 100
386 ms 50884 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);
	}
	build(1,0,n);
	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*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:81:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |   for(int i=0;i<g[x].size();i++){
      |               ~^~~~~~~~~~~~
sequence.cpp:84:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |    while(i+ans<g[x].size()){
      |          ~~~~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Incorrect 3 ms 16984 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Incorrect 3 ms 16984 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Correct 309 ms 45248 KB Output is correct
3 Correct 311 ms 45176 KB Output is correct
4 Correct 313 ms 37836 KB Output is correct
5 Correct 294 ms 44224 KB Output is correct
6 Correct 298 ms 44180 KB Output is correct
7 Correct 279 ms 37980 KB Output is correct
8 Correct 292 ms 37828 KB Output is correct
9 Correct 320 ms 38336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 16984 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 369 ms 50884 KB Output is correct
2 Correct 383 ms 50824 KB Output is correct
3 Correct 386 ms 50368 KB Output is correct
4 Correct 384 ms 50320 KB Output is correct
5 Incorrect 363 ms 47044 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Incorrect 3 ms 16984 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Incorrect 3 ms 16984 KB Output isn't correct
3 Halted 0 ms 0 KB -