SP13707 SHAHBG - SHAHBAG
题意
一个数列,每次操作把一个位置改成 1,
每次操作后,求数列中有多少段连续的 1。
思路
分类讨论,考虑每次操作的位置的左右两边的数(只是两个数):
- 左右两边的数都是 0:...0 1 0...
这个位置单独构成一段,答案加一。
- 左右两边的数都是 1:...01...1 1 1...10...
这个位置把原来左右两段连成一段,答案减一。
- 一边是 0,一边是 1:
...01...1 1 0...0...或者 ...0...0 1 1...10...
这个位置会接到左边或者右边的段,答案不变。
代码
#include <iostream>
using namespace std;
bool a[20050];int n, ans;
int main()
{
cin >> n;
for(int i = 0, t;i < n;++i)
{
cin >> t;a[t] = 1;
if(!a[t - 1] && !a[t + 1]) ++ans;
else if(a[t - 1] && a[t + 1]) --ans;
cout << ans << endl;
}
cout << "Justice" << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具