Luogu P11157 【MX-X6-T3】さよならワンダーランド 题解
神秘思维题。
考虑到转化式子,拆成 和 。前一个不等式是容易满足的,我们只需要在 中选择 即可。
第二个不等式可化为 ,因此我们在 中选择 的最大值。如果最大值在位置 ,则有 。注意到 相同时大小关系只与 有关,所以同一个 内最大值取到哪与 无关,按照 预处理一下即可。
我们枚举每一个 ,直接判断预处理出的最大值位置是否合法,就解决了这个问题。
#include <bits/stdc++.h>
using namespace std;
long long t,n,a[500000],b[500000],p[500000];
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),b[i]=a[i]-i,p[i]=i;
for(int i=n-1;i>=1;i--)
if(b[p[i]]<b[p[i+1]])p[i]=p[i+1];
for(int i=1;i<=n;i++)
{
long long t=max(1ll,i+a[i]);
if(t>n)printf("0\n");
else if(p[t]-i<=a[p[t]])printf("1 %lld\n",p[t]-i);
else printf("0\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探