题解:P9757 [COCI2022-2023#3] Dirigent
分析
设
记
显然当
我们可以在一开始预先
考虑一次交换操作带来的贡献。
对于任意一个人,可以
所以
但是如果
Code
#include<bits/stdc++.h> using namespace std; #define maxn 300005 int a[maxn], pos[maxn]; #define pre(i) (((i)==1)?(n):((i)-1)) #define nxt(i) (((i)==n)?(1):((i)+1)) #define chkpre(x) (a[x]==a[pre(x)]+1) #define chknxt(x) (a[x]+1==a[nxt(x)]) int main() { int n, q, x, y; cin>>n>>q; int cnt=0; for(int i=1;i<=n;i++) cin>>a[i], pos[a[i]]=i; for(int i=1;i<=n;i++) if(a[i]==a[pre(i)]+1) cnt++; while(q--) { cin>>x>>y; if(pre(x)==y) swap(x, y); int nx=x, ny=y; x=pos[x], y=pos[y]; cnt-=chkpre(x)+chknxt(x)+chkpre(y)+chknxt(y); if(nxt(x)==y&&a[x]+1==a[y]) cnt++; swap(a[x], a[y]); swap(pos[nx], pos[ny]); cnt+=chkpre(x)+chknxt(x)+chkpre(y)+chknxt(y); swap(x, y); if(nxt(x)==y&&a[x]+1==a[y]) cnt--; cout<<(cnt==n-1?"DA":"NE")<<'\n'; } }
本文作者:Jimmy-LEEE
本文链接:https://www.cnblogs.com/redacted-area/p/18429454
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步