2e5数据被卡常求助
查看原帖
2e5数据被卡常求助
1022907
lql1楼主2024/8/28 14:34

本来是用的是vector暴力插入,在2×1052\times 10^5的数据范围内TLE 50pts50\text{pts},换成rope后 ,在2×1052\times 10^5TLE 80pts80pts,求助如何卡常卡过2×1052\times 10^5的数据

#include<bits/stdc++.h>
#include<ext/rope>

using namespace std;
using namespace __gnu_cxx;

int n,c[200005],f[200005];
rope<int> a;
inline void add(register int& x,const register int& k){
	while(x<=n) c[x]=c[x]>k?c[x]:k,x+=x&-x;
}
inline int query(const register int& x1){
	register int res=0,x=x1;
	while(x>0) res=res>c[x]?res:c[x],x-=x&-x;
	return res;
}
signed main() {
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	auto c1=clock();
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(register int i=1,cc;i<=n;++i) cin>>cc,a.insert(cc,i);
	for(register int i=0;i<n;++i) {
		register int cc=a[i];
		const register int tt=query(cc)+1;
		f[cc]=tt;
		add(cc,tt);
	}
	for(register int i=1;i<=n;++i) cout<<f[i]=f[i]>f[i-1]?f[i]:f[i-1])<<\n';
	auto c2=clock();
	cerr<<"times="<<c2-c1<<"ms\n";
	return 0; 
}
2024/8/28 14:34
加载中...