传送门

题解

做法与题解基本无异,不过他说用vector我觉得用链表来得更好一些。

#include<queue>
#include<ctime>
#include<bitset>
#include<vector>
#include<cstdio>
#include<algorithm>
#define MN 110000
using namespace std; int read_p,read_ca,read_f;
inline int read(){
read_p=;read_ca=getchar();read_f=;
while(read_ca<''||read_ca>'') {if (read_ca=='-') read_f=-;read_ca=getchar();}
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p*read_f;
}
struct na{unsigned long long x;int p,ne;}b[MN*];
int n,m,a[MN],id[MN],Ra[MN],now=,pos[MN],T,num=,qn=,mmh[MN],sz[MN],fa[MN],l[MN],NUM=,U[<<],SS=;
vector <int> Qx[MN],Qy[MN],Qp[MN],to[MN],x[MN],y[MN];
bool cmp(int x,int y){return a[x]<a[y];}
inline int gf(int x){while(x!=fa[x]) x=fa[x];return x;}
queue<int> q;
inline void add(int x,int y){
if (x==y) return;
fa[x]=y;sz[y]+=sz[x];
for (int A=l[x],*B=&l[y];A!=-;A=b[A].ne){
while (b[*B].p<b[A].p&&*B!=-) B=&b[*B].ne;
if (*B==-||b[*B].p>b[A].p){
int p;if(q.empty())p=NUM++;else p=q.front(),q.pop();
b[p].x=b[A].x;b[p].p=b[A].p;
b[p].ne=*B;*B=p;B=&b[p].ne;
}else b[*B].x^=b[A].x;
}
}
inline void del(int x,int y){
if (x==y) return;
fa[x]=x;sz[y]-=sz[x];
for (int A=l[x],*B=&l[y];A!=-;A=b[A].ne){
while (b[*B].p<b[A].p&&*B!=-) B=&b[*B].ne;
b[*B].x^=b[A].x;
if (!b[*B].x) q.push(*B),*B=b[*B].ne;
}
}
inline int calc(int x,int y){
x=gf(x);
if (sz[x]<y) return -;
for (int i=l[x];i!=-;i=b[i].ne)
if (y>U[b[i].x>>]+U[(b[i].x>>)&]+U[(b[i].x>>)&]+U[b[i].x&]) y-=U[b[i].x>>]+U[(b[i].x>>)&]+U[(b[i].x>>)&]+U[b[i].x&];else
for (int j=;j<;j++)
if ((b[i].x>>j)&) if (!(--y)) return (b[i].p<<)|j;
}
void dfs(int p){
for (int i=;i<Qx[p].size();i++) mmh[Qp[p][i]]=calc(Qx[p][i],Qy[p][i]);
for (int i=;i<to[p].size();i++){
int X=x[p][i],Y=y[p][i];
if (X==-) X=Y;
X=gf(X);Y=gf(Y);
if (sz[X]>sz[Y]) swap(X,Y);
add(X,Y);
dfs(to[p][i]);
del(X,Y);
}
}
int main(){
//freopen("a.in","r",stdin);
n=read();m=read();
for (int i=;i<(<<);i++) U[i]=U[i^(-i&i)]+;
for (int i=;i<n;i++) a[i]=read(),id[i]=i,fa[i]=i,sz[i]=;
sort(id,id+n,cmp);
for (int i=;i<n;i++) l[id[i]]=i,b[i].x=1ull<<(i&),b[i].p=i>>,b[i].ne=-;NUM=n; for (int i=;i<=m;i++){
T=read();
if (T==) num++,to[now].push_back(num),x[now].push_back(read()-),y[now].push_back(read()-),now=num;else
if (T==) now=pos[read()];else Qx[now].push_back(read()-),Qy[now].push_back(read()),Qp[now].push_back(qn++);
pos[i]=now;
}
dfs();
//freopen("a.out","w",stdout);
for (int i=;i<qn;i++) printf("%d\n",mmh[i]==-?-:a[id[mmh[i]]]);
}

LibreOJ β Round #2 F. 数学上来先打表的更多相关文章

  1. F. 数学上来先打表

    题解: 搞这题搞了一天 思维不是很难 就是暴力压位bitset 分块做法速度更快 但是stl里的不能实现这个功能 所以手动实现 64位压一位 到65535跑一下1的个数 然后(x>>16) ...

  2. 汕头市队赛 SRM10 T3 数学上来先打表

    数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两 ...

  3. 【STSRM10】数学上来先打表

    [算法]DP+数学计数 [题意]给出n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案(对1004535809取模): 1.每条边连接两个不同的点,每两个点之间至多有一条边. 2.不存在 ...

  4. [loj519]数学上来先打表

    建立操作树,即1和3操作时i-1向i连边,2操作中k向i连边,然后dfs一遍 那么当我们走到一个节点,就执行该操作(修改也是操作),退出后取消该操作即可 于是相当于要维护一个东西,支持:1.加边:2. ...

  5. LibreOJ β Round #2 题解

    LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...

  6. [LOJ#531]「LibreOJ β Round #5」游戏

    [LOJ#531]「LibreOJ β Round #5」游戏 试题描述 LCR 三分钟就解决了问题,她自信地输入了结果-- > -- 正在检查程序 -- > -- 检查通过,正在评估智商 ...

  7. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  8. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  9. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例

    [LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...

随机推荐

  1. qt调用simsimi api实现小黄鸡

    项目地址:https://github.com/racaljk/xiaojianji 好吧我把它命名为小贱鸡.,下面说一说他的实现. 由于官方的simsimi api需要收费,免费试用版有各种限制,所 ...

  2. React:入门计数器

    ---恢复内容开始--- 把React的官网入门例子全看一遍,理解了,但自己从头开始写有点困难,这次强迫自己从头开始写,并写好注释: import React, { Component } from ...

  3. 命令行执行php脚本 中$argv和$argc

    在实际工作中有可能会碰到需要在nginx命令行执行php脚本的时候,当然你可以去配置一个conf用外网访问. 在nginx命令行中 使用 php index.php 就可以执行这个index.php脚 ...

  4. bzoj 3670: [Noi2014]动物园

    Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...

  5. OpenStack运维(二):OpenStack计算节点的故障和维护

    1.计划中的维护 举例:需要升级某一个计算节点的硬件配置,需要将计算节点上的虚拟机迁移后在对其进行操作,分为两种情况. 1.1 云系统使用了共享存储 a. 获取虚拟机列表:nova list --ho ...

  6. 第四节 mount /who / mkdir /rmdir /rm /cp /mv /touch /cat /tac/head /tail /more /less / chmod /chown /umask /chattr /lsattr /history /echo

    ***Linux下的文件类型如下: 9 8 7 6 5 4 3 2 1 0- r w x r - x r - x 第9位表示文件类型,可以为p.d.l.s.c.b和-:p表示命名管道文件 -pipe ...

  7. HyperV下安装Centos 7全屏显示方法

    Hyper-v一般模式的分辨率很小,所以我们在电脑上显示的时候往往不能全屏,即使全屏了也只是轮廓全部工作区并没有全屏显示.导致这个问题的原因是:我们在装系统时,没有选择合适的屏幕分辨率,所以这里只要在 ...

  8. CSS Sprites使用

    CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢 ...

  9. angular4.0项目build发布后,刷新页面报错404

    angular4.0项目执行npm run build后,进入页面正常显示. 但是当刷新页面时,报错404,页面未找到. 出现这个问题的原因,应该是找不到路由地址导致的,然后找到了下面的解决方案. 找 ...

  10. webapi框架搭建-日志管理log4net

    前言 本篇讲怎么在前几篇已经创建好的项目里加上日志处理机制,我们采用Log4net技术.跟多的log4net技术的细节请查阅log4net的官网. log4net官网:http://logging.a ...