x2

线段树合并(模板)

雨燕双飞 提交于 2019-12-02 12:49:23
线段树合并的原理比较简单,这里贴一下模板。 基本结构就是: int hb(int x1,int x2) { 1、若x1、x2是叶子节点,那么将x2合并到x1 2、若x1的左儿子为空,x2的左儿子不为空,那么将x1的左指针指向x2的左儿子;若x1、x2的左儿子都不为空那么继续合并它们的左儿子 3、右儿子同上 4、f[x1]=f[x1的左儿子]……f[x1的右儿子](更新f[x1]) } 在贴一个例子(以f[x]=f[lson]+f[rson]为例): int hb(int z1,int z2) { if(f[z1].l==f[z1].r){f[z1].v|=f[z2].v;return 0;} if(f[z1].ls==0&&f[z2].ls!=0)f[z1].ls=f[z2].ls; else if(f[z1].ls!=0&&f[z2].ls!=0)hb(f[z1].ls,f[z2].ls); if(f[z1].rs==0&&f[z2].rs!=0)f[z1].rs=f[z2].rs; else if(f[z1].rs!=0&&f[z2].rs!=0)hb(f[z1].rs,f[z2].rs); f[z1].v=f[f[z1].ls].v+f[f[z1].rs].v; } 来源: https://blog.csdn.net/chiyankuan/article/details

局部变量的作用域

ぐ巨炮叔叔 提交于 2019-12-02 06:15:24
问题 :这里的TP、FP、Score在不同的函数内部使用了同样的变量命名是否允许? 代码: def metrics_precision(x1,x2): TP=np.sum((x1==1)&(x2==1)) FP=np.sum((x1==0)&(x2==1)) score=TP/TP+FP return score def metrics_recall(x1,x2): TP=np.sum((x1==1)&(x2==1)) FN=np.sum((x1==1)&(x2==0)) score=TP/TP+FN return score 知识点:Python的局部变量 1 局部变量是在函数内部定义的变量,只能在定义函数的内部使用 2 函数执行结束后,函数内部的局部变量会被系统收回 3 不同函数可以定义相同名字的局部变量,但是各用个的互不影响 来源: https://www.cnblogs.com/athenawang/p/11734025.html

【UVA1057】Routing

我的未来我决定 提交于 2019-12-01 10:22:14
【UVA1057】Routing 题面 洛谷 题解 有一个比较好想的dp就是 \(f_{i,j}\) 表示第一个点在 \(i\) ,第二个点在 \(j\) 的最小点数,但是直接搞不好转移。 考虑建出反图,那么 \(j\) 表示在反图上的点 \(j\) 其实是和正图上的是一样的。 这样子的话我们枚举出边转移: \[ f[v][u2]=f[u1][u2]+[u2!=v],((u1,v)\in G)\\ f[u1][v]=f[u1][u2]+[u1!=v],((u2,v)\in G') \] 然而我们交换两条路径时发现点数会算多,这种情况我们用另一种方式转移: \[ f[u2][u1]=min(f[u2][u1],f[u1][u2]+dis[u1][u2]-1) \] 其中 \(dis[u1][u2]\) 表示 \(u1,u2\) 间的最短路,可以用 \(floyd\) 求出。 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <vector> using namespace std; const int INF = 1e9; const int MAX

F Energy stones

妖精的绣舞 提交于 2019-12-01 08:31:42
题意是,有$n$个石头,每个石头有初始能量$E_i$,每秒能量增长$L_i$,以及能量上限$C_i$,有$m$个收能量的时间点,每次把区间$\left[S_i, T_i\right]$石头的能量都给收掉,石头的能量都置零重新开始增长。问最后收了多少能量。 看完题解觉得好有道理...我好菜... 考虑每个石头在多少个时间点收能量,然后每次收的能量就和这些时间点的时间间隔有关。 若时间间隔大于等于$\dfrac {C_i}{L_i}$,那么这一段对答案的贡献就是$C_i$了,统计有多少这样的段即可。 若时间间隔小于$\dfrac {C_i}{L_i}$那么对答案的贡献就是时间长度$t \times L_i$。 用两个权值树状数组可以维护对应时间长度的和及个数。 时间点可以用set维护。从前到后遍历,遇到一个$S_i$就把对应是时间加入,遇到一个$T_i + 1$就把时间删去,同时维护树状数组即可。感觉看代码就很好懂? #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 2e5 + 7; int n, m; ll E[N], C[N], L[N]; set<int> st; vector<int> G[N]; struct BIT { ll tree1[N], tree2[N];

洛谷p2827蚯蚓题解

不想你离开。 提交于 2019-12-01 07:23:43
题目 算法标签里的算法什么的都不会啊 什么二叉堆?? qbxt出去学习的时候讲的,一段时间之前做的,现在才写到博客上的 维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那一部分,队列3表示每一次被切的蚯蚓被分开的较短的那一部分。 我们先把原序列排序,因为不管怎么切,先被切的蚯蚓分成的两部分一定比后切的蚯蚓分成的两部分大 寻找每次切哪一只蚯蚓就是在队列1、队列2、队列3的队头找一个算上增加的长度最大的蚯蚓,之后把他出队,切开的两部分分别进入队2、队3。 最后合并输出 Code: #include <queue> #include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int N = 10000010; unsigned long long n, m, q, u, v, a[N], ans[N], s, y, tot, t; queue<int>q1, q2, q3; int cmp (long x, long y) { return x > y; } int maxn () { long long x1 = -(1 << 30), x2 = x1, x3 = x1; if (!q1.empty ()) x1 = q1.front ();

bash PS1配色

心已入冬 提交于 2019-12-01 07:00:04
bash的命令提示符和终端外观由环境变量PS1定义 PS1 在每个命令之前显示的主提示符,因此它是每个人都不同的。 PS2 当一个命令需要更多的输入(例如,一个多行命令)中显示的辅助提示。 PS3 不是很常用。 PS4 也是不常用。 PS1格式 \u 表示用户(username); \h 表示主机(hostname); \w 表示当前工作目录(directory); \$ 如果您不是超级用户 (非root),则插入一个 "$";如果您是超级用户(root),则显示一个 "#"。 \[ 这个字符应该出现在不占位转义字符(如颜色转义字符)之前,它使bash能够正确计算自动换行; \] 这个字符应该出现在不占位转义字符(如颜色转义字符)之后; \e ASCII转义字符序列开始(也可以键入 \033); \a ASCII响铃字符(也可以键入 \007); \d "Wed Sep 06"格式的日期; \H 主机的全称(如 "mybox.mydomain.com"); \j 在此shell中通过按 ^Z挂起的进程数; \l 此shell的终端设备名 (如"ttyp4"); \n 换行符; \r 回车符; \s shell的名称(如 "bash"); \t 24小时制时间(如 "23:01:01"); \T 12小时制时间(如 "11:01:01"); \@ 带有 am/pm的 12小时制时间;

C# 对ToString(\"X2\")的理解

久未见 提交于 2019-12-01 02:52:00
转化为16进制字符串。 大写X:ToString("X2")即转化为大写的16进制。 小写x:ToString("x2")即转化为小写的16进制。 2表示输出两位,不足2位的前面补0,如 0x0A 如果没有2,就只会输出0xA Random rand = new Random();有三个重载方法 rand.next()返回非负随机数 rand.next(minvalue,maxvalue)返回两者之间的随机数 int value=rand.Next(35);返回小于35的非负随机数。 Enumerable.Range(0, 16); //Get Random Number thru RNGCryptoServiceProvider byte[] randomBytes = new byte[8]; StringBuilder randomNumber = new StringBuilder(); using (var crypto = new RNGCryptoServiceProvider()) { crypto.GetBytes(randomBytes); foreach (var byt in randomBytes) { randomNumber.Append($"{byt:x2}"); } } 来源: https://www.cnblogs.com/sophieyyl/p

遗传算法及其matlab实现(示例用python库geatpy,matlab遗传工具箱geatbx和lingo三种方式求解)

南楼画角 提交于 2019-11-29 14:26:13
智能算法是一个边缘交叉学科,有蚁群、粒子群算法、遗传算法、免疫算法、模拟退火等,都乐意算作机器学习的一种类别。 文章目录 理论 生物理论基础 历史 算法 编解码 编码 解码 染色体交配运算产生子代染色体 crossover 基因突变运算产生子代染色体 染色体倒位运算产生子代染色体 个体适应度评估 复制运算 示例 示例2 遗传算法是模拟达尔文进化论和孟德尔遗传学原理的生物计算模型,是一种模拟自然进化过程以搜索最优解的方法。 理论 生物理论基础 先列出遗传算法中使用到的自然选择的基本观点:(仿佛回到了高二) 种群 是进化的基本单位 进化的实质是种群基因频率的改变 基因突变、基因重组、自然选择和隔离 是物种形成过程的三个基本环节 突变和重组产生进化的原材料 自然选择使得种群的基因频率定向改变,决定进化方向 隔离是新物种形成的必要条件 新物种形成途径有二, 渐进式和爆发式 ,遗传算法中用到了这两种思想。渐进式是通过 变异的逐渐积累 产生新物种;爆发式是通过 杂交和染色体结构变化 产生新物种。 历史 1975年,密歇根大学的J.Holland教授提出“遗传算法”的概念。那是最基本的遗传算法原型,现在已有很多变体。 算法 GA包括编解码、遗传运算、个体适应度评估三部分。其中遗传运算包括染色体复制、交叉、变异、倒位。 基因 :染色体上的片段,取值0/1 个体 :编码后的染色体

算术运算符

天大地大妈咪最大 提交于 2019-11-29 08:50:29
MySQL软件提供的算术运算符可以直接对表中数据或字段进行运算。 MySQL软件提供的运算符包含算术运算符、比较运算符、逻辑运算符和位运算符四类。 1、使用算术运算符 运算符 概述 表达式形式 + 加法 x1+x2+...+xn - 减法 x1-x2-...-xn * 乘法 x1*x2*...*xn /(DIV) 除法 x1/x2/.../xn x1 DIV X2 DIV ... DIV xn %(MOD) 求余 x1%x2%...%xn x1 MOD x2 MOD ... MOD xn 2、比较运算符 比较运算符包括常用的比较运算符和实现特殊功能比较运算符 常用比较运算符 运算符 描述 表达式形式 > 大于 x1>x2 < 小于 x1<x2 = <=> 等于 x1=x2 x1<=>x2 !=(<>) 不等于 x1!=x2 x1<>x2 >= 大于等于 x1>=x2 <= 小于等于 x1<=x2 实现特殊功能比较运算符 特殊功能比较运算符包含实现判断是否存在于指定方位的between and,实现判断是否为空的is null,判断是否存在指定集合的in,实现通配符的like和实现正则表达式匹配的regexp。 MySQL支持的模式字符如下: 模式字符 含义 ^ 匹配字符串的开始部分 $ 匹配字符串的结束部分 . 匹配字符串中的任意一个字符 [字符集和]

201403-2 窗口

穿精又带淫゛_ 提交于 2019-11-28 21:42:46
问题描述   在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。   当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。   现在我们希望你写一个程序模拟点击窗口的过程。 输入格式   输入的第一行有两个正整数,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10)   接下来 N 行按照从最下层到最顶层的顺序给出 N 个窗口的位置。 每行包含四个非负整数 x 1 , y 1 , x 2 , y 2 ,表示该窗口的一对顶点坐标分别为 (x 1 , y 1 ) 和 (x 2 , y 2 )。保证 x 1 < x 2 ,y 1 2。   接下来 M 行每行包含两个非负整数 x, y,表示一次鼠标点击的坐标。   题目中涉及到的所有点和矩形的顶点的 x, y 坐标分别不超过 2559 和  1439。 输出格式   输出包括 M 行,每一行表示一次鼠标点击的结果。如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从 1 编号到 N);如果没有,则输出"IGNORED"