• bzoj3674同上(好短)


    +强在 就过了

    既没有启发式又没有路径压缩,连建树都用的是代码最短的写法(什么心态,每天追求代码短)

    话说回来 可持久化的数组感觉只能出类似裸题的题目,,,,藏也藏不住啊

     1 #include <cstdio>
     2 #define mid ((l+r)>>1)
     3 int n,m,time,N=0,ca,x,y;
     4 int root[500000],ls[8000000],rs[8000000],a[8000000];
     5 int change(int x,int y)
     6 {
     7     int l=1,r=n,now=++N,past=root[time];
     8     root[++time]=N;
     9     while(l!=r)
    10         if(x<=mid)    rs[now]=rs[past],ls[now]=++N,r=mid,now=ls[now],past=ls[past];
    11         else    ls[now]=ls[past],rs[now]=++N,l=mid+1,now=rs[now],past=rs[past];
    12     a[now]=y;
    13 }
    14 int que(int x)
    15 {
    16     int l=1,r=n,now=root[time];
    17     while(l!=r)
    18         if(x<=mid)    r=mid,now=ls[now];
    19         else    l=mid+1,now=rs[now];
    20     return a[now];
    21 }
    22 int get(int p)
    23 {
    24     for(int t=que(p);t!=p;t=que(p))    p=t;
    25     return p;
    26 }
    27 int main()
    28 {
    29     scanf("%d%d",&n,&m);
    30     root[time=0]=1;
    31     for(int i=1;i<=n;i++)
    32         change(i,i);
    33     int start=time,lastans=0;
    34     for(int i=1;i<=m;i++)
    35     {
    36         scanf("%d%d",&ca,&x);x^=lastans;
    37         if(ca==2) root[++time]=root[x+start];
    38         else
    39             scanf("%d",&y),y^=lastans,(ca==1)?change(get(y),get(x)):(root[time+1]=root[time++],printf("%d
    ",get(x)==get(y)));
    40     }
    41     return 0;
    42 } 
  • 相关阅读:
    lombok、japidocs、swagger学习
    mysql数据库添加新用户,并授予所有权限
    局域网内共享自己的数据库
    HttpURLConnection模板
    nginx简单学习总结
    redis常见命令
    mybatis中的#{}和${}的区别
    Python的多线程
    使用python发送邮件
    python操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5982542.html
Copyright © 2020-2023  润新知