Scoring Subsequences
难度不是很大。主要是二分方式。
首先,题目要求值最大且覆盖区间最长。
因为要求最大,且序列单调递增。所以很容易想到,是从后往前取造成的贡献最大。
但是这样有一个反作用,加入说区间是 ,当前取到了 ,如果 ,那就必然说明这里就产生了小于 的数,必然要比取 要小。(可以考虑一一对应去看, 对应 , 对应 ,显然是每个 都要大于底下的那个数,这个值才可能最大)。
所以就考虑二分这个位置,然后不断地记录能取区间最大值,最后出来的就是值最大,且区间长度最大了。
用 来表示 ,时间是 。
#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int a[N],s1[N],s[N];
int Slove(int x){
int l=1,r=x,len=0,sum=0;
while(l<=r){
sum++;
if(sum>x) break;
int mid=(l+r)>>1;
if(x-mid+1<=a[mid]) len=max(len,x-mid+1),r=mid-1;
else l=mid+1;
}
cout<<len<<" ";
}
int main(){
int n,t;
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<1<<" ";
for(int i=2;i<=n;i++){
Slove(i);
}
cout<<endl;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现