제출 #1198239

#제출 시각아이디문제언어결과실행 시간메모리
1198239nouka28서열 (APIO23_sequence)C++20
컴파일 에러
0 ms0 KiB
#include "sequence.h"

#include<bits/stdc++.h>
using namespace std;

#include<atcoder/all>
using namespace atcoder;
using mint=atcoder::modint998244353;

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

// #define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define rng(i,l,r) for(int i=(l);i<(r);i++)
#define rrep(i,n) for(int i=(n)-1;i>=0;i--)
#define rrng(i,l,r) for(int i=(r)-1;i>=(l);i--)

#define fi first
#define se second
#define all(x) (x).begin(),(x).end()

struct dat{
	int l=0,r=0,sml=0,smr=0;
};

using S=pair<dat,dat>;

S op(S a,S b){
	S ret;
	ret.fi.l=min(a.fi.l+b.fi.sml,b.fi.l);
	ret.fi.r=max(a.fi.r+b.fi.smr,b.fi.r);
	ret.fi.sml=a.fi.sml+b.fi.sml;
	ret.fi.smr=a.fi.smr+b.fi.smr;
	ret.se.l=min(a.se.l,b.se.l+a.se.sml);
	ret.se.r=max(a.se.r,b.se.r+a.se.smr);
	ret.se.sml=a.se.sml+b.se.sml;
	ret.se.smr=a.se.smr+b.se.smr;
	return ret;
}

S e(){
	return S();
}
int sequence(int N, std::vector<int> A) {

	// cout<<"N : "<<N<<endl;
	// cout<<"A : ";for(auto&&e:A)cout<<e<<" ";cout<<endl;

	for(auto&&e:A)e--;
	vector<vector<int>> g(N);
	rep(i,N)g[A[i]].push_back(i);

	int ans=0;

	segtree<S,op,e> seg;
	{
		S t={{1,1,1,1},{1,1,1,1}};
		seg=segtree<S,op,e>(vector<S>(N,t));
	}

	rep(i,N){
		if(!g[i].size())continue;

		// cout<<"i : "<<i<<endl;

		vector<int> vs=g[i];
		
		for(auto&&p:vs){
			seg.set(p,{{-1,1,-1,1},{-1,1,-1,1}});
		}

		// cout<<"seg : ";rep(j,N)cout<<seg.get(j).fi.l<<" ";cout<<endl;

		// cout<<i<<" : ";
		// for(auto&&e:vs)cout<<e<<" ";cout<<endl;

		rep(j,vs.size()){
			seg.set(vs[j],{{-1,-1,-1,-1},{-1,-1,-1,-1}});
			int ok=j,ng=vs.size();
			while(abs(ok-ng)>1){
				// cout<<"!"<<j<<" "<<ok<<" "<<ng<<endl;
				int mid=(ok+ng)>>1;

				auto t1=seg.prod(0,vs[j]);
				auto t2=seg.prod(vs[j],vs[mid]+1);
				auto t3=seg.prod(vs[mid]+1,N);
				
				int l=t1.fi.l+t3.se.l;
				int r=t1.fi.r+t3.se.r;
				l+=t2.fi.sml,r+=t2.fi.smr+1;

				// cout<<j<<" "<<ok<<" : "<<l<<" "<<r<<endl;
				// cout<<"! "<<t1.fi.l<<" "<<t1.fi.r<<" , "<<t2.fi.l<<" "<<t2.fi.r<<endl;
				if(r<=-1||1<=l){
					ng=mid;
				}else{
					ok=mid;
				}
			}
			seg.set(vs[j],{{-1,1,-1,1},{-1,1,-1,1}});
			ans=max(ans,ok-j+1);
		}

		for(auto&&p:vs){
			seg.set(p,{{-1,-1,-1,-1},{-1,-1,-1,-1}});
		}
	}

	// cout<<"ans : "<<ans<<endl;

	return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp:6:9: fatal error: atcoder/all: No such file or directory
    6 | #include<atcoder/all>
      |         ^~~~~~~~~~~~~
compilation terminated.