/ Randle /

记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 5ms 1.82 MiB
#2 Accepted 2ms 1.82 MiB
#3 Accepted 2ms 1.824 MiB
#4 Accepted 2ms 1.816 MiB
#5 Accepted 2ms 1.941 MiB
#6 Accepted 3ms 1.949 MiB
#7 Accepted 3ms 1.82 MiB
#8 Accepted 19ms 2.066 MiB
#9 Accepted 31ms 2.207 MiB
#10 Accepted 31ms 2.191 MiB

代码

#include<bits/stdc++.h>
const int maxn=100001;
int big[maxn<<2];
inline const void update(int p)
{
	big[p]=std::max(big[p<<1],big[p<<1|1]);
}
inline const void modify(int p,int l,int r,int pos,int k)
{
	if(l==r&&r==pos){big[p]=k;return ;}
	int mid=(l+r)>>1;
	if(mid>=pos)modify(p<<1,l,mid,pos,k);
	if(mid+1<=pos)modify(p<<1|1,mid+1,r,pos,k);
	update(p);
}
inline const int query(int p,int l,int r,int rr)
{
	if(r<=rr)return big[p];
	int mid=(l+r)>>1,ans=-1;
	ans=query(p<<1,l,mid,rr);
	if(mid+1<=rr)ans=std::max(ans,query(p<<1|1,mid+1,r,rr));
	return ans;
}
int main()
{
	memset(big,0,sizeof(big));
	int n,a[maxn],f[maxn],ans=-1;
	std::cin>>n;
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
	{
		f[i]=0;
		f[i]=query(1,0,n,a[i])+1;
		modify(1,0,n,a[i],f[i]);
		ans=std::max(ans,f[i]);
	}
	std::cout<<ans;
	return 0;
}

信息

递交者
类型
递交
题目
序 T2
题目数据
下载
语言
C++
递交时间
2017-10-19 19:55:51
评测时间
2017-10-19 19:55:51
评测机
分数
100
总耗时
104ms
峰值内存
2.207 MiB