实时查询(otoci)
暂无链接
实时查询
[问题描述]
给出n个结点以及每个结点对应的权值起始时,结点与结点之间没有连边
有以下三类操作:
(1) bridge A B:询问结点A与结点B是否连通,如果是,则输出“no”;否则,输出
“yes”,并且在结点A和结点B之间连一条无向边:
(2) penguins A X:将结点A对应的权值WAW_AWA修改为X
(3) excursion A B如果结点A和结点B不连通,则输出“impossible”;否则,输出结点 A到结点B的路径上的点对应的权值的和。
给出q个操作,要求处理所有操作。
[输入格式]
第一行包含一个整数n(1≤n≤30000)n(1\le n\le 30000)n(1≤n≤30000).表示结点的数B。
第二行包含n个整数.第i个整数表示第i个结点初始时对应的权值。
第三行包含一个整数q(1≤q≤300000)q(1\le q \le 300000)q(1≤q≤300000)表示操作的数目
以下q行.每行包含一个操作,操作的类别见题目描述。
任意时刻每个结点对应的权值都足1到1000之间的整数。
[输出格式]
输出所有bridge操作和excursion操作对应的输出,每个一行。
[输入样例]
6
1 2 3 4 5 6
10
bridge 1 2
bridge 2 3
bridge 4 5
excursion 1 3
excursion 1 5
bridge 3 4
excursion 1 5
penguins 3 10
excursion 1 3
bridge 1 5
[输出样例]
yes
yes
yes
6
impossible
yes
15
13
no
[时间和空间限制]
时间限制为1秒,空间限制为256MB。
题解
也是很板的LCT\mathcal{LCT}LCT了,只需要维护一个点权和就好了。
判断连通性可以用并查集,因为没有删边的操作,能不用findrootfindrootfindroot就不用。
但是LCT\mathcal{LCT}LCT依然很慢,要加常数优化才能A最后一个点。
代码
#include<bits/stdc++.h>
#define R register int
#define I inline void
#define ls son[v][0]
#define rs son[v][1]
using namespace std;
const int M=3e4+5;
int son[M][2],dad[M],sum[M],sta[M],val[M],f[M],n,q;
bool rev[M];
inline bool notroot(int v){return son[dad[v]][0]==v||son[dad[v]][1]==v;}
I up(R v){sum[v]=val[v]+sum[ls]+sum[rs];}
I turn(R v){swap(ls,rs);rev[v]^=1;}
I push(R v){if(!rev[v])return;if(ls)turn(ls);if(rs)turn(rs);rev[v]=0;}
I spin(R v)
{int f=dad[v],ff=dad[f],k=son[f][1]==v,w=son[v][!k];if(notroot(f))son[ff][son[ff][1]==f]=v;son[v][!k]=f;son[f][k]=w;if(w)dad[w]=f;dad[f]=v;dad[v]=ff;up(f);up(v);
}
I splay(R v)
{int f,ff,top=0,u=v;sta[++top]=u;while(notroot(u))sta[++top]=u=dad[u];while(top)push(sta[top--]);while(notroot(v)){f=dad[v];ff=dad[f];if(notroot(f))spin((son[f][0]==v)^(son[ff][0]==f)?v:f);spin(v);}
}
I access(R v){for(R f=0;v;v=dad[f=v])splay(v),rs=f,up(v);}
I beroot(R v){access(v);splay(v);turn(v);}
I split(R x,R y){beroot(x);access(y);splay(y);}
I link(R x,R y){beroot(x);dad[x]=y;}
int find(R v){return f[v]==v?v:f[v]=find(f[v]);}
void in()
{scanf("%d",&n);for(R i=1;i<=n;++i)scanf("%d",&val[i]),sum[i]=val[i],f[i]=i;
}
void ac()
{int a,b,t1,t2;char ch[20];scanf("%d",&q);for(R i=1;i<=q;++i){scanf("%s%d%d",ch,&a,&b);switch(ch[0]){case 'b':{t1=find(a);t2=find(b);if(t1==t2){printf("no\n");break;}printf("yes\n");link(a,b);f[t1]=t2;break;}case 'p':splay(a);val[a]=b;up(a);break;case 'e':{t1=find(a);t2=find(b);if(t1!=t2){printf("impossible\n");break;}split(a,b);printf("%d\n",sum[b]);break;}}}
}
int main()
{in();ac();return 0;
}
实时查询(otoci)相关推荐
- Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置
之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种 ...
- SQL Server 2016:实时查询统计
一个数据库查询超时了,而你并不知道原因.估计查询计划可以揭示问题所在,因此,你彻底地消除了超时.但一个小时后,查询还在运行,而你无法获得真正的执行计划.要是有一种方法可以找出服务器内部实际正在发生的事 ...
- dnf拍卖行计算机在线,DNF助手拍卖行在哪里 拍卖行物价实时查询
最近地下城与勇士游戏也是迎来了十周年的庆典,这款承载了不少人童年的游戏在这款时间也回归了不少老玩家,打算重拾起这款游戏.这款游戏其实福利力度非常的大,送的奖励异常丰富,不过这需要玩家自己去发现,小编现 ...
- Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...
转自:http://www.36dsj.com/archives/28590 Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分 ...
- 体验一下Oracle 11g物理Active Data Guard实时查询(Real-time query)
以下为[高可用] 课后一则实验日志: --------------------------------------------------------------------------------- ...
- PHP检查微信域名屏蔽接口,微信域名检测API接口,实时查询域名是否被微信拦截...
微信域名检测API接口的应用场景: 由于微信对外部链接内容规范比较严格,所以可能一不小心就会被判定为是违反内容规范的,或被同行恶意举报投诉之类的. 那么此时就要用到微信域名检测接口,实时检测域名的状态 ...
- oracle查效能,【DataGuard】Oracle 11g物理Active Data Guard实时查询(Real-time query)特性...
在Oracle 11g以前版本中的的Data Guard物理备用数据库,可以以只读的方式打开数据库,但此时Media Recovery利用日志进行数据同步的过程就停止了,如果物理备用数据库处于恢复的过 ...
- 海口交警入驻百度地图交通云平台 市民可实时查询实景路况
以后,海口市民可以实时查询实景路况啦.百度地图与海口交警早已签署战略合作协议,双方将在交通便民服务创新等四个方面开展合作.其中,海口交警将把其掌握的公安交通管理相关信息和数据与百度地图进行共享,市民通 ...
- Elasticsearch——利用Parent-Child关系解决大数据场景下的实时查询
表与表之间的关联基本上是所有业务系统都存在的,RDBMS通过外键实现,MongoDB通过嵌入式子文档解决,那么Elasticsearch怎么解决这个问题呢?答案就是Parent-Child关联(参考文 ...
- oracle查效能,Oracle 11g物理Active Data Guard实时查询(Real-time query)特性
table t (x varchar2(8)); Table created. secooler@ora11g> insert into t values ('Secooler'); 1 row ...
最新文章
- 一劳永逸关闭Windwos默认共享
- 校园网服务器系统需求分析,校园网的网络系统集成建设需求分析的主要工作
- GitHub上传本地代码到仓库[Windows]
- mysql stragg_如何在MySQL中將子查詢行的結果顯示為一列?
- 与歌谣通关前端面试题【CSS篇汇总目录】
- Python 爬取淘宝商品信息栏目
- ThinkPHP/---合并数组后按时间排序
- 为什么大部分的程序员成不了架构师?为什么?
- javascript技术教程蔡敏_JavaScript基础与实践教程 (王萍萍,赵俊莉,孙强) pdf扫描版...
- 张俊芳电机学13章计算题以及答案
- 深圳活用大数据提升气象服务
- 给老年人“种草”,是不是一门好生意?
- 数字金额转中文大写金额 - 数字大写转换
- hdu 6437 Videos 最小费用最大流
- Soul网关源码阅读06-使用zookeeper同步数据(01)
- GHO是什么文件 与ISO镜像文件有什么不同
- 视频教程-微信公众平台开发入门-微信开发
- CF连杀喊话_WeGame修改
- java在字符串开头添加字符串_string - java:使用StringBuilder在开头插入
- Linux 并发与竞争