P10308 「Cfz Round 2」Osmanthus 题解
题目大意
一开始有一个序列
- 将每个元素
a_i 替换为\bigoplus\limits_{j=1}^ia_j 。
题目分析
首先,我们发现,对于第
但是很明显,有一段是特殊的,即
然后我们要维护动态前导
其实这个动态前导
时间复杂度
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
int a[maxn];
int main()
{
int n,q;
cin>>n>>q;
set<int> s;
for(int i=1;i<=n+1;i++)
s.insert(i);
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==0) s.erase(s.lower_bound(i));
}
while(q--)
{
int x,z;
scanf("%d%d",&x,&z);
if(a[x]!=0&&z==0) s.erase(s.lower_bound(x));
else
{
if(a[x]==0&&z!=0)
s.insert(x);
}
a[x]=z;
int y=n-*s.begin()+1;
int ans=1;
while(ans<y) ans*=2;
cout<<ans<<"\n";
}
}