LOC 2020.11.20 - Prob. 1

Desc. & Link.

\(C=2^{k}\bmod(a+b+c)\)

#include <cstdio>

typedef long long LL;

int A, B, C, K;

int Qkpow( int base, int indx, int mod ){
int res = 1;
while( indx ){
if( indx & 1 ) res = ( LL )res * base % mod;
base = ( LL )base * base % mod;
indx >>= 1;
}
return res;
} int main( ){
int TC; scanf( "%d", &TC ); while( TC -- > 0 ){
scanf( "%d%d%d%d", &A, &B, &C, &K );
printf( "%lld\n", ( LL )C * Qkpow( 2, K, A + B + C ) % ( A + B + C ) );
}
return 0;
}

LOC 2020.11.20 - Prob. 2

Desc. & Link.

我先行否决 naive 的线段树。

输入暗示连边?

那就连吧。

考虑每一个连通块 \(S\),如果连通块是个树,就只能选 \(|S|-1\) 个点。

如果存在环,那么每个数都取得到。

那么可以的情况就是询问区间包含的不是一棵树。

#include <cstdio>

const int MAXN = 2e5 + 5;

template<typename _T> _T MIN( const _T x, const _T y ){ return x > y ? y : x; }
template<typename _T> _T MAX( const _T x, const _T y ){ return x > y ? x : y; } struct pointS{
int one, ano;
pointS( int O = 0, int A = 0 ){ one = A; ano = A; }
} pntS[MAXN]; struct starS{
int to, nx;
starS( int T = 0, int N = 0 ){ to = T; nx = N; }
} as[MAXN * 2]; int N, K, Q;
int totE;
int firS[MAXN], furS[MAXN], enS[MAXN], mxV[MAXN], mnV[MAXN], vis[MAXN]; void pushEdge( const int u, const int v ){ as[++ totE] = starS( v, firS[u] ); firS[u] = totE; furS[u] ++; } void DFS( const int u, int &mxVt, int &mnVt, int &edgeS, int &nodeS ){
mxVt = MAX( mxVt, u ); mnVt = MIN( mnVt, u );
edgeS += furS[u]; nodeS ++; vis[u] = 1;
for( int i = firS[u]; i; i = as[i].nx ){
int v = as[i].to;
if( vis[v] ) continue;
DFS( v, mxVt, mnVt, edgeS, nodeS );
}
} int main( ) {
scanf( "%d%d", &N, &K );
for( int i = 1; i <= K; ++ i ){
scanf( "%d%d", &pntS[i].one, &pntS[i].ano );
pushEdge( pntS[i].one, pntS[i].ano );
pushEdge( pntS[i].ano, pntS[i].one );
}
for( int i = 1; i <= N; ++ i ) enS[i] = N + 1;
for( int i = 1; i <= N; ++ i ){
if( vis[i] ) continue;
int mxVt = 1, mnVt = N, edgeS = 0, nodeS = 0;
DFS( i, mxVt, mnVt, edgeS, nodeS ); edgeS >>= 1;
if( edgeS == nodeS - 1 ) enS[mnVt] = mxVt;
}
for( int i = N - 1; i; -- i ) enS[i] = MIN( enS[i], enS[i + 1] );
scanf( "%d", &Q );
while( Q -- > 0 ){
int queL, queR;
scanf( "%d%d", &queL, &queR );
if( enS[queL] > queR ) printf( "Yes\n" );
else printf( "No\n" );
}
return 0;
}

LOC 2020.11.20 - Prob. 3 / CF396C On Changing Tree

Desc. & Link.

哇哦。

喜闻乐见的 DS 题。

大约是届一下 \(\texttt{lazy tag}\) 的思想。

对于一个节点 \(u\),只有在路径 \((1,u)\) 上的修改才会产生影响。

这个询问有够简单,差个分即可。

修改就子树加 \(x\),再加个 \(k\)(除根节点)。

树剖,完了。

#include <cstdio>
#define mod ( 1000000007 ) typedef long long LL; const int MAXN = 3e5 + 5; template<typename _T>
void read( _T &x ){
x = 0; char c = getchar( ); _T f = 1;
while( c < '0' || c > '9' ){ if( c == '-' ) f = -1; c = getchar( ); }
while( c >= '0' && c <= '9' ){ x = ( x << 3 ) + ( x << 1 ) + ( c & 15 ); c = getchar( ); }
x *= f;
} template<typename _T>
void write( _T x ){
if( x < 0 ){ putchar( '-' ); x = -x; }
if( x > 9 ) write( x / 10 );
putchar( x % 10 + '0' );
} template<typename _T> void swapp( _T &x, _T &y ){ int w = x; x = y; y = w; } struct starS{
int to, nx;
starS( int T = 0, int N = 0 ){ to = T; nx = N; }
} as[MAXN * 2]; struct nodeS{
int val, add;
nodeS( int V = 0, int A = 0 ){ val = V; add = A; }
} nodes[MAXN * 4]; int N, M;
int sjc, cnt;
int firS[MAXN], posL[MAXN], posR[MAXN], top[MAXN], son[MAXN], dep[MAXN], fur[MAXN], fa[MAXN]; void pushEdge( const int u, const int v ){ as[++ cnt] = starS( v, firS[u] ); firS[u] = cnt; } void oneSearch( const int u, const int lst ){
fa[u] = lst; dep[u] = dep[lst] + 1; fur[u] = 1;
for( int i = firS[u]; i; i = as[i].nx ){
int v = as[i].to;
oneSearch( v, u );
fur[u] += fur[v];
if( fur[v] > fur[son[u]] ) son[u] = v;
}
} void anotherSearch( const int u, const int nTp ){
top[u] = nTp; posL[u] = ++ sjc;
if( son[u] ) anotherSearch( son[u], nTp );
for( int i = firS[u]; i; i = as[i].nx ){
int v = as[i].to;
if( v == son[u] ) continue;
anotherSearch( v, v );
}
posR[u] = sjc;
} void Spr( const int x, const int l, const int r ){
if( ! nodes[x].add ) return;
int mid = ( l + r ) >> 1;
nodes[x << 1].val = ( nodes[x << 1].val + ( LL )nodes[x].add * ( mid - l + 1 ) % mod ) % mod;
nodes[x << 1 | 1].val = ( nodes[x << 1 | 1].val + ( LL )nodes[x].add * ( r - mid ) % mod ) % mod;
nodes[x << 1].add = ( nodes[x << 1].add + nodes[x].add ) % mod;
nodes[x << 1 | 1].add = ( nodes[x << 1 | 1].add + nodes[x].add ) % mod;
nodes[x].add = 0;
} void Upt( const int x ){ nodes[x].val = ( nodes[x << 1].val + nodes[x << 1 | 1].val ) % mod; } void Modify( const int x, const int l, const int r, const int segL, const int segR, const int segW ){
if( l > segR || r < segL ) return;
if( l >= segL && r <= segR ){
nodes[x].val = ( nodes[x].val + ( LL )segW * ( r - l + 1 ) % mod ) % mod;
nodes[x].add = ( nodes[x].add + segW ) % mod;
return;
}
int mid = ( l + r ) >> 1;
Spr( x, l, r );
Modify( x << 1, l, mid, segL, segR, segW );
Modify( x << 1 | 1, mid + 1, r, segL, segR, segW );
Upt( x );
} int Query( const int x, const int l, const int r, const int segL, const int segR ){
if( l > segR || r < segL ) return 0;
if( l >= segL && r <= segR ) return nodes[x].val;
int mid = ( l + r ) >> 1; Spr( x, l, r );
return ( Query( x << 1, l, mid, segL, segR ) + Query( x << 1 | 1, mid + 1, r, segL, segR ) ) % mod;
} int QueryP( int u, int v ){
int res = 0;
while( top[u] != top[v] ){
if( dep[top[u]] < dep[top[v]] ) swapp( u, v );
res = ( ( res + Query( 1, 1, N, posL[top[u]], posL[u] ) ) % mod + mod ) % mod;
u = fa[top[u]];
}
if( dep[u] >= dep[v] ) swapp( u, v );
res = ( ( res + Query( 1, 1, N, posL[u], posL[v] ) ) % mod + mod ) % mod;
return res;
} int main( ){
read( N );
for( int i = 2, lst; i <= N; ++ i ){ read( lst ); pushEdge( lst, i ); }
oneSearch( 1, 0 ); anotherSearch( 1, 1 );
read( M );
while( M -- > 0 ){
int opt, u, x, k;
read( opt );
if( opt == 1 ){
read( u ); read( x ); read( k );
Modify( 1, 1, N, posL[u], posL[u], x );
Modify( 1, 1, N, posL[u] + 1, posR[u], -k );
}
else{ read( u ); write( QueryP( 1, u ) ); putchar( '\n' ); }
}
return 0;
}

LOC 2020.11.20 - Prob. 4

Desc. & Link.

不想做了。

Record - Nov. 20th, 2020 - Exam. SOL的更多相关文章

  1. 18.自动运维工具ansible

    1 Ansible 介绍和架构 1.1 Ansible介绍 ansible 的名称来自科幻小说<安德的游戏>中跨越时空的即时通信工具,使用它可以在相距数光年的 距离,远程实时控制前线的舰队 ...

  2. IOS UI篇—UILabel的文字顶部对齐

    UILabel的文字顶部对齐 NOV 20TH, 2011 默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中. 如下图所示(图片来自stackove ...

  3. CSP-S 2019文澜中学游记(11.15~11.17)

    前言 今年的\(CSP-S\),本以为自己的实力与去年的\(NOIP\)相比,能有较大的提升的. 没想到,菜是原罪,弱就是弱,依然逃脱不了被吊锤的命运. \(Nov\ 15th\):\(Day\ 0\ ...

  4. CentOS7重装yum和python

    卸载现有的Python和Yum 1.删除现有Python ##强制删除已安装程序及其关联 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ...

  5. 分布式文档存储数据库之MongoDB副本集

    前文我们聊到了mongodb的索引的相关作用和介绍以及索引的管理,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13950287.html:今天我们来聊下mon ...

  6. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  7. python实战GUI界面+mysql

    前言 前面用tkinter做了一个巨丑的GUI界面,今天想把它变漂亮起来,重新找回page做了一个界面,它也是基于tkinter开发的所见即所得的界面编辑器,前面因为代码搞不明白没用上,现在重新研究一 ...

  8. 如何获取公网IP的mac地址

    如何获取远程IP的mac地址 思路分析 由于java本身没有相关的jar包进行获取,所以这里介绍从其他的方面进行入手和实践 使用的工具对比: tcpdump tshark pcap4j 都可以达到抓包 ...

  9. 在linux下使用Apache搭建文件服务器

    目录 一.关于文件服务器 二.使用Apache搭建文件服务器 三.测试文件服务器是否可用 一.关于文件服务器 ​ 在一个项目中,如果想把公共软件或者资料共享给项目组成员,可以搭建一个简易的文件服务器来 ...

  10. CentOS 搭建 SVN 服务器 及使用教程

    服务器与客户端 1.搭建SVN服务器 ① CentOS安装SVN 命令: yum -y install subversion 检查是否安装成功 命令: svn --version 如果显示如下内容说明 ...

随机推荐

  1. k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离

    1.基于镜像分层构建及自定义镜像运行Nginx及Java服务并基于NFS实现动静分离 1.1.业务镜像设计规划 根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境 ...

  2. 微生物组分析软件 QIIME 2 安装小记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. QIIME 2 是一个功能强大,可扩展,分散式的(decentralized)微生物组分析软件 ...

  3. SQL注入三连实战绕过WTS-WAF

    一键三连,sql注入 一次无意之间发现的sql注入,主要是因为有一个WTS-WAF,在此记录一下 只是友好测试,并非有意为之.... 牛刀小试1 手注 判断字段数 测试到order by 15的时候出 ...

  4. 解决org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource **/**/dao/**Mapper.xml问题

    1. 问题分析 出现此问题的原因是资源过滤的问题,编写在DAO包中的XML文件没有被打包. 2. 解决方案 在pom.xml文件中加入如下资源过滤: <!-- 静态资源导出问题 --> & ...

  5. 2023-06-07:Redis 持久化方式有哪些?以及有什么区别?

    2023-06-07:Redis 持久化方式有哪些?以及有什么区别? 答案2023-06-07: Redis提供了两种持久化机制:RDB和AOF. RDB RDB持久化是将Redis当前进程中的数据生 ...

  6. 深入探究for...range语句

    1. 引言 在Go语言中,我们经常需要对数据集合进行遍历操作.对于数组来说,使用for语句可以很方便地完成遍历.然而,当我们面对其他数据类型,如map.string 和 channel 时,使用普通的 ...

  7. NoSQL数据库系统原理:从概念到实现

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2. 核心模块实现 3.3. ...

  8. GPU技术在大规模数据集处理和大规模计算中的应用

    目录 GPU 技术在大规模数据集处理和大规模计算中的应用 随着深度学习在人工智能领域的快速发展,大规模数据处理和大规模计算的需求日益增长.GPU(图形处理器)作为现代计算机的重要部件,被广泛应用于这些 ...

  9. memcached使用中踩的一些坑

    背景 线上启用memcached(以下简称mc)作为热点缓存组件已经多年,其稳定性和性能都经历住了考验,这里记录一下踩过的几个坑. 大key存储 某年某月某日,观察mysql的读库CPU占比有些异常偏 ...

  10. 构建高可用性的 SQL Server:Docker 容器下的主从同步实现

    摘要:本文将介绍如何在 Docker 环境下搭建 MS SQL Server 的主从同步,帮助读者了解主从同步的原理和实现方式,进而提高数据的可靠性和稳定性. 一.前言 在当今信息化的时代,数据的安全 ...