2025 1.8 做题记录
CF323C
注意到这是两个排列。考虑对于每个值
CF1370D
典 trick。对于找最小的值,我们可以考虑二分答案。将所有的
CF1404C
考虑观察什么样的点会被加到答案里面。对于
il void solve(){
n=rd,q=rd;
for(re int i=1;i<=n;++i){
a[i]=rd;
if(a[i]<=i) b[++len]={i,i-a[i]};
}
while(q--){
int x=rd,y=n-rd+1;
++x,--y;
int l=lower_bound(b+1,b+len+1,pii{x,-1})-b;
int r=upper_bound(b+1,b+len+1,pii{y,inf})-b-1;
int c=0;
for(re int i=l;i<=r;++i) c+=(c>=b[i].y);
cout<<c<<"\n";
}
return ;
}
考虑优化。注意到这个形式貌似很典,考虑分块维护。我们记
那么对于散块,我们暴力维护删了多少个点,记
这里又有个很典的 trick,考虑将询问离线,那么我们去枚举每一个块。记
这里给出暴力求
#define id(x) ((x-1)/len+1)
const int N=3e5+1,M=sqrt(N)+1;
int n,q,b[N],c[N],m;
int len,g[N];
int mx[M],C[N];
int ans[N];
struct node{
int id,R,r;
};
int le[N],ri[N],rr[N];
il void query(int l,int r,int id){
int bl=id(l),br=id(r);
if(bl==br){
le[id]=-1;
for(re int i=l;i<=r;++i) ans[id]+=(ans[id]>=c[i]);
return ;
}
for(re int i=l;i<=bl*len;++i) ans[id]+=(ans[id]>=c[i]);
if(bl+1>=br){
le[id]=-1;
for(re int i=(br-1)*len+1;i<=r;++i) ans[id]+=(ans[id]>=c[i]);
return ;
}
le[id]=bl+1,ri[id]=br,rr[id]=r;
return ;
}
il int get(int l,int r,int x){
int cnt=0;
for(re int i=l;i<=r;++i) cnt+=(g[i]<=x);
return cnt;
}
il void solve(){
n=rd,q=rd;
for(re int i=1;i<=n;++i){
int x=rd;
if(x<=i&&i-x<=i-1) b[++m]=i,c[m]=i-x;
}
len=sqrt(m);
for(re int i=1;i<=m;++i){
int l=0,r=n,ans=-1;
while(l<=r){
int mid=l+r>>1;
if(get((id(i)-1)*len+1,i-1,mid)+mid>=c[i]) ans=mid,r=mid-1;
else l=mid+1;
}
g[i]=ans,mx[id(i)]=max(mx[id(i)],g[i]);
}
for(re int i=1;i<=q;++i){
int x=rd,y=n-rd+1;
++x,--y;
int l=lower_bound(b+1,b+m+1,x)-b;
int r=upper_bound(b+1,b+m+1,y)-b-1;
query(l,r,i);
}
for(re int i=1;i<=id(m);++i){
for(re int j=0;j<=mx[i];++j) C[j]=0;
for(re int j=(i-1)*len+1;j<=min(i*len,m);++j) ++C[g[j]];
for(re int j=1;j<=mx[i];++j) C[j]+=C[j-1];
for(re int id=1;id<=q;++id){
if(le[id]==-1) continue;
if(ri[id]<i||le[id]>i) continue;
if(ri[id]==i){
for(re int j=(i-1)*len+1;j<=rr[id];++j) ans[id]+=(ans[id]>=c[j]);
continue;
}
ans[id]+=C[min(mx[i],ans[id])];
}
}
for(re int i=1;i<=q;++i) printf("%d\n",ans[i]);
return ;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性