• 题意:给你一个无限长且元素均为\(0\)的排列,每次给你一对\((x,y)\),表示在所有\(x\)的后面插入一个元素\(y\),最后给你一个区间\((l,r)\),输出\([l,r-1]\)中的所有元素.

  • 题解:我们用一个vector和pair来存储每次输入的\((x,y)\),显然,在\(x\)后插入的最后一个数一定是\(x\)后的第一个数,所以我们将按顺序插入的pair全部倒置一下,然后从\(0\)开始dfs:x表示颜色,pos表示位置

    我们知道这个排列其实是一个循环节,记\(col\)数组是循环节的元素,\(cnt\)是循环节的长度,长度最多取到\(r\)就行了.

    假如\(x\)后面的数的位置大于当前x的位置,那么就不断dfs的去找,用\(col\)来记录.这里最难的就是这个位置的理解,要自己好好推一推!!!.

    姑且可以这么认为:pos大的在前面,pos小的在后面,只有v[x].pos>pos才可以dfs下去

    最后按循环节来输出即可.

  • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #include <unordered_set>
    #include <unordered_map>
    #define ll long long
    #define fi first
    #define se second
    #define pb push_back
    #define me memset
    const int N = 1e6 + 10;
    const int mod = 1e9 + 7;
    using namespace std;
    typedef pair<int,int> PII;
    typedef pair<long,long> PLL; int n;
    int l,r;
    int a,b;
    int cnt;
    int col[N];
    vector<PII> v[N]; void dfs(int x,int pos){
    if(cnt>=r) return;
    col[cnt++]=x;
    for(auto w:v[x]){
    if(w.se>pos){
    printf("%d\n",w.fi);
    dfs(w.fi,w.se);
    } else return;
    }
    } int main() {
    ios::sync_with_stdio(false);
    cin>>n>>l>>r;
    for(int i=1;i<=n;++i){
    cin>>a>>b;
    v[a].pb({b,i});
    }
    for(int i=0;i<N;++i){
    if(!v[i].empty()) reverse(v[i].begin(),v[i].end());
    }
    dfs(0,0);
    for(int i=l;i<r;++i){
    printf("%d ",col[i%cnt]);
    }
    puts(""); return 0;
    }

最新文章

  1. Oracle 11g系列:函数与存储过程
  2. DPABI advanced edition 文件夹组织形式
  3. UDP通讯程序设计
  4. session基础
  5. Writable、WritableComparable和comparators
  6. Jquery实现图片的预加载与延时加载
  7. DelphiXE7操作sqlite数据库
  8. Sublime 2 Installation for Linux
  9. vb.net窗口继承(房重建知识汇总)
  10. (转载)Git使用教程
  11. js获取不带单位的像素值
  12. I2C(四)linux3.4(写代码)
  13. Dynamics 365-ExecuteWorkflowRequest
  14. MySql下实现先排序后分组
  15. windows 下命令行启动停止mysql
  16. PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
  17. centos中执行apt-get命令提示apt-get command not found
  18. 继承方法--&gt;一级一级继承
  19. 使用HVTableView动态展开tableView中的cell
  20. 给大家推荐一款非常好用的表单验证插件:lr-verify.js

热门文章

  1. self-taught CS resouce recommendation
  2. Docker haproxy应用构建 (五)
  3. logback为不同的包或类指定输出日志文件
  4. ctfhub技能树—文件上传—文件头检查
  5. 二本学生拿到腾讯大厂offer的成长记录
  6. vue、element-ui 后台菜单切换重新请求数据
  7. 阿里云镜像仓库镜像迁移至私有Harbor
  8. CentOS对接GlusterFS
  9. Bitter.Core系列二:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之数据库连接
  10. 2、剑指offer-字符串——替换空格