社区讨论

60pts倍增求调

P6148[USACO20FEB] Swapity Swapity Swap S参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mlsvjsqj
此快照首次捕获于
2026/02/19 11:01
3 周前
此快照最后确认于
2026/02/22 20:25
3 周前
查看原帖

60pts60pts倍增法求调(WA onon #66、#77、#88、#1010)


CPP
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
int l[105],r[105];
int f[100005][40];
int a[100005];
int main(){
    cin>>n>>m>>k;
    iota(a,a+n+1,0);
    for(int i=1;i<=m;i++){
        cin>>l[i]>>r[i];
        reverse(a+l[i],a+r[i]+1);
    }
    for(int i=1;i<=n;i++) f[i][0]=a[i];
    for(int j=1;j<=30;j++) for(int i=1;i<=n;i++)
    f[i][j]=f[f[i][j-1]][j-1];
    for(int i=1;i<=n;i++){
        int now=i;
        for(int j=30;j>=1;j--) if(k&(1<<j)) now=f[now][j];
        cout<<now<<"\n";
    }
}

回复

3 条回复,欢迎继续交流。

正在加载回复...