D. Ones and Twos
题解
先考虑操作一,首先要数组总和不小于
其次,我们可以通过两边删数来得到子数组,如果两边任一边有二,我们删掉二之后,
实施
用集合维护奇数的个数和位置
code
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,q;
cin>>n>>q;
set<int> pos;
int sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
if(a[i]==1) pos.insert(i);
}
while(q--)
{
int op;
cin>>op;
if(op==1)
{
int s;
cin>>s;
int len=pos.size();
//printf("sum1: %d\n",sum);
if(len==0)
{
if(s%2==sum%2) puts("yes");
else puts("no");
continue;
}
//printf("maxs:%d mins:%d size:%d\n",*pos.rbegin(),*pos.begin(),len);
int sum1=2*(*pos.rbegin()-len)+len-1;
int sum2=2*(n-*pos.begin()+1)-len-1;
//printf("sum2: %d\nsum3: %d\n",sum1,sum2);
if(s%2==sum%2)
{
if(s<=sum) puts("yes");
else puts("no");
}
else
{
if(s<=max(sum1,sum2)) puts("yes");
else puts("no");
}
}
else
{
int id,v;
cin>>id>>v;
if(v==1)
{
if(a[id]==2)
{
pos.insert(id);
sum--;
}
a[id]=1;
}
else
{
if(a[id]==1)
{
pos.erase(id);
sum++;
}
a[id]=2;
}
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~