CF1896D Ones and Twos 题解
如果只有单次询问其实可以双指针,但是这个难以进行拓展。
考虑找点性质。
发现
然后就变为找最大的和为奇/偶数了,因为如果最大的都不行就肯定不行了。
于是就只需要支持快速找到最左边和最右边的
代码十分简洁。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,sum;
int a[200010];
set<int> s[3];
void solve(){
scanf("%d%d",&n,&m);sum=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),s[a[i]].insert(i),sum+=a[i];
for(int _=1,opt,x;_<=m;_++){
scanf("%d%d",&opt,&x);
if(opt==1){
if((sum&1)==(x&1)){
if(sum>=x)puts("YES");
else puts("NO");
}else{
if(!s[1].size())puts("NO");
else{
int mx=max(sum-(*s[1].begin())*2+1,sum-(n-(*s[1].rbegin())+1)*2+1);
if(mx>=x)puts("YES");
else puts("NO");
}
}
}else{
int y;scanf("%d",&y);
sum-=a[x];s[a[x]].erase(x);
a[x]=y;
sum+=a[x];s[a[x]].insert(x);
}
}
s[1].clear();s[2].clear();
}
int main(){
int T;
scanf("%d",&T);
while(T--)solve();
return 0;
}
标签:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现