这代码不是O(n)的吗
  • 板块学术版
  • 楼主windows_fleon
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/10/13 10:11
  • 上次更新2023/11/2 14:11:07
查看原帖
这代码不是O(n)的吗
531499
windows_fleon楼主2023/10/13 10:11
// CF1886 C
#include<bits/stdc++.h>
using namespace std;
int vis[1000005],cnt;long long pos;
char a[1000005];
void solve(){
	string s;
	scanf("%s",a);scanf("%lld",&pos);
	cnt=0;s=a;
	for(int i=s.size();i>=1;i--){
		if(pos>i){
			pos-=i;
		}
		else{
			cnt=s.size()-i;
			break;
		}
	}
	for(int i=0;i<=s.size();i++) vis[i]=0;
	for(int i=0;i<s.size();i++){
		for(int j=i+1;j<s.size()&&j<=i+cnt;j++){
			if(s[j]<s[i]){
				vis[i]++;vis[j]--;
				cnt-=(j-i);i=j-1;break;
			}
		}
		if(!cnt) break;
	}
	for(int i=1;i<s.size();i++) vis[i]+=vis[i-1];
	for(int i=s.size()-1;i>=0;i--){
		if(!cnt) break;
		if(!vis[i]) cnt--,vis[i]=1;	
	}
	for(int i=0;i<s.size();i++){
		if(!vis[i]) pos--;
		if(!pos){
			printf("%c",s[i]);
			return;
		}
	}
}
int main(){
	int t;scanf("%d",&t);
	while(t--){
		solve();
	}
	return 0;
}
2023/10/13 10:11
加载中...