結果

問題 No.921 ずんだアロー
ユーザー ate
提出日時 2019-11-18 14:58:09
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 50 ms / 2,000 ms
コード長 3,762 bytes
コンパイル時間 3,296 ms
コンパイル使用メモリ 213,860 KB
最終ジャッジ日時 2025-01-08 04:06:17
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(ll i=0;i<(n);++i)
using ll = long long;
using pll = pair<ll,ll>;
constexpr ll INF = (1LL<<60);
constexpr ll MOD = (1e9+7);
//constexpr ll MOD = (998244353);
template<class T> bool chmax(T &a,const T &b){if(a<b){a=b;return 1;}return 0;}
template<class T> bool chmin(T &a,const T &b){if(a>b){a=b;return 1;}return 0;}
void dump(){cout<<endl;}
template<class T,class... Ts> void dump(T&& h, Ts&&... t){cout<<h<<", ";dump(forward<Ts>(t)...);}
template<class T> istream &operator>>(istream&is,vector<T>&v){for(auto &elemnt:v)is>>elemnt;return is;}
template<class T,class U> istream &operator>>(istream&is,pair<T,U>&p){is>>p.first>>p.second;return is;}
template<class T>vector<T> make_vector(size_t a){return vector<T>(a);}
template<class T, class... Ts>auto make_vector(size_t a, Ts... ts){return vector<decltype(make_vector<T>(ts...))>(a, make_vector<T>(ts...));}
void solve1();
void solve2();
void solve3();
void solve4();
int main(){
solve4();
return 0;
}
void solve4(){
ll n;cin>>n;
vector<ll> a(n);
cin>>a;
vector<ll>dp(n+1);
dp[0]=0;
dp[1]=1;
for(ll i=2;i<=n;++i){
if(a[i-1]==a[i-2])dp[i]=dp[i-1]+1;
else dp[i]=dp[i-2]+1;
}
cout<<(*max_element(dp.begin(),dp.end()))<<endl;
}
void solve3(){
ll n;cin>>n;
vector<ll> a(n);
cin>>a;
vector<ll> dp(2*n);
rep(i,n-1){
ll t=0;
if(i>0&&a[i]==a[i+1])chmax(t,dp[i]);
if(i-1>=0)chmax(t,dp[i-1]);
if(i-2>=0)chmax(t,dp[i-2]);
dp[i+1]=t+1;
}
dp[n]=max(dp[n-1],dp[n-2])+1;
cout<<(*max_element(dp.begin(),dp.end()))<<endl;
}
template<class T>
class segtree {
private:
ll n=1;
T unit;
std::vector<T> dat;
std::function<T(T,T)> func;
public:
segtree(){}
segtree(std::vector<T> a,T v,std::function<T(T,T)> f){
build(a,v,f);
}
void build(std::vector<T>& a,T v,std::function<T(T,T)> f){
ll sz=a.size();
unit=v;
func=f;
while(n<sz)n<<=1LL;
dat.resize(2*n-1,unit);
for(int i=0;i<sz;++i)dat[i+n-1]=a[i];
for(int i=n-2;i>=0;--i){
dat[i]=func(dat[i*2+1],dat[i*2+2]);
}
}
void update(ll idx,T val){
idx+=n-1;
dat[idx]=val;
while(idx){
idx--;idx>>=1LL;
dat[idx]=func(dat[idx*2+1],dat[idx*2+2]);
}
}
T query(ll a,ll b,ll k=0,ll l=0,ll r=-1){
if(r<0)r=n;
if( b<=l || r<=a )return unit;
if( a<=l && r<=b )return dat[k];
else{
auto left=query(a,b,2*k+1,l,(l+r)/2);
auto right=query(a,b,2*k+2,(l+r)/2,r);
return func(left,right);
}
}
};
void solve2(){
ll n;
cin>>n;
vector<ll> a(n);
cin>>a;
vector<ll> b;
ll cnt=1;
rep(i,n-1){
if(a[i]!=a[i+1]){
b.emplace_back(cnt);
cnt=1;
}else{
cnt++;
}
}
b.emplace_back(cnt);
ll m = b.size();
vector<ll> dp(m+1);
segtree<ll> seg(vector<ll>(m+1),0,[](auto a,auto b){return max(a,b);});
dp[1]=b[0];
seg.update(1,b[0]);
for(ll i=2;i<=m;++i){
dp[i]=max(dp[i-2],seg.query(0,i-1)+b[i-1]);
seg.update(i,dp[i]);
}
cout<<(seg.query(0,m+1))<<endl;
}
void solve1(){
ll n;
cin>>n;
vector<ll> a(n);
cin>>a;
vector<ll> b;
ll cnt = 1;
rep(i,n-1){
if(a[i]!=a[i+1]){
b.emplace_back(cnt);
cnt=1;
}else{
cnt++;
}
}
b.emplace_back(cnt);
auto indexed = [](vector<ll>const& v){
vector<pll> a(v.size());
rep(i,v.size())a[i]={v[i],i};
return a;
};
segtree<pll> seg(indexed(b),pll(0ll,0ll),[](auto a,auto b){return max(a,b);});
ll ans = 0;
ll m = b.size();
while(1){
ll val,idx;
tie(val,idx)=seg.query(0,m);
if(val==0)break;
ans += val;
seg.update(idx,pll(0ll,0ll));
if(idx>0)seg.update(idx-1,pll(0ll,0ll));
if(idx+1<m)seg.update(idx+1,pll(0ll,0ll));
}
cout<<(ans)<<endl;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0