begin

dtoi4706 异或

早过忘川 提交于 2020-02-07 01:24:16
题意: 题解: 询问l~r的答案,很显然我们直接转化成0~r的答案减去0~(l-1)的答案。 如何求0~a的答案,从高位往低位枚举。 (1)如果当前位置在a中是1,那么这个位置可以取0,也可以取1。如果取0,那后面的随便取都无所谓,也就是说,后面的位置的0,1是可以随便乱放的,也就是说当前这一位为0^(x的这一位),然后之后位随便取,恰好是一个区间,可以求区间的答案。接下来把这一位取1^(x的这一位)然后继续往低位走。 (2)如果当前位置在a中是0,那么这个位置只能取0,就把这一位取0^(x的这一位),接着走。 接下来就是快速查询一段区间的答案,也就是一段区间的f(i)值。方法很多,可以二分直接做,然而我写了颗线段树维护。。。 #include<cstdio> #include<algorithm> #include<cstdlib> using namespace std; const int mod=998244353,INF=(1<<30)-1; int n,q,a[100002],cnt=1; typedef struct{ int ls,rs; long long sum,f; }P; P p[10000002]; void pushdown(int root,int begin,int mid,int end){ if (p[root].f) { if (!p[root

C++复习vector

故事扮演 提交于 2020-02-04 13:40:34
动态数组vector 1、创建: vector<int>v; vector<int>v1; vector<int>v2(v1) 即 vector<int>v2 = v1; vector<int>v = {1,3,5,7,9}; 即 vector<int>v{1,3,5,7,9}; vector<int>v1{1,3,5,7,9}; vector<int>v2(v1.begin()+1,v1.end()-1); 即 v2 = {3, 5, 7}; vector<int>v(4); 即 创建了一个容量为4的容器 v vector<int>(4,0); 即 v 中初始有4个值为0的元素 二维数组 vector<int>v[n] vector<vector<int> >v; 2、使用: 常用 v.push_back(a); //将a添加到 v 的末尾 v.size(); //返回 v 的元素个数 v.clear(); //清空 v v中的元素 v.empty(); //若 v 为空则返回true,否则返回false v.begin() & v.end(); //返回 v 头尾的迭代器 赋值 直接赋值:v1 = v2; 使用assign函数 v1.assign(v1.begin()+2, v2.end()-1); v1.assign(6,1) // v 只含6个元素,每个元素为1 v1

3. Longest Substring Without Repeating Characters

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-04 11:24:03
思路: begin (最重要的变量)记录longest substring开始的位置;longest当前substring的长度;map存放字符的index。实质上是维护了一个substring区间,使得substring内的所有字符都是独一无二的。 class Solution { public : int lengthOfLongestSubstring ( string s ) { if ( s . length ( ) <= 1 ) { return s . length ( ) ; } unordered_map < char , int > map ; int ans = 0 ; int longest = 0 ; int begin = 0 ; for ( int i = 0 ; i < s . length ( ) ; ++ i ) { if ( map . count ( s [ i ] ) == 0 || map [ s [ i ] ] < begin ) { // 只要map中的字符index不在begin之后,都视为不存在 map [ s [ i ] ] = i ; ++ longest ; } else { int before = map [ s [ i ] ] ; map [ s [ i ] ] = i ; longest = i - before ;

[总结] 第一类斯特林数

时光总嘲笑我的痴心妄想 提交于 2020-02-04 01:58:24
第一类斯特林数 \(\begin{bmatrix}n\\m\end{bmatrix}\) ,将 \(n\) 个元素划分为 \(m\) 个圆排列的方案数。 递推 递推式可以枚举最后一个元素是否放一个新的排列: \(\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)\times \begin{bmatrix}n-1\\m\end{bmatrix}\) 下面用 \(s(n,m)\) 表示 \(\begin{bmatrix}n\\m\end{bmatrix}\) 。 性质 \[ \begin{aligned}n!=\sum_{i=0}^n s(n,i)\end{aligned} \] 证明:考虑其组合意义。一个排列唯一对应一个置换,而一个置换唯一对应一组轮换。比如排列 \((1,5,2,3,4)\) ,就可以看作轮换组 \([1][2,5,4][3]\) 。如果两个排列不同,那他们对应的轮换中,必定有一个元素的下一个元素不同,故排列与轮换一一对应。所以等式右侧的式子就是有 $0\sim n $ 个轮换的方案数。 求法 现在要快速求出第一类斯特林数的某一行。 直接给出定义, \(s(n,*)\) 这东西的生成函数等于 \(\prod\limits_{i=0}^{n-1} (x+i)\)

dtoi4702 Gcd

血红的双手。 提交于 2020-02-03 22:28:48
题意: 有一个长度为n的互不相同的序列,求对于任意i,j,1<=i<=j<=n,求g(i,j)。 g(i,j)的定义是将i~j的元素都删除之后剩余的数字两两之间gcd的最大值。 题解: 首先枚举gcd,考虑什么时候会作为答案。 找到它的倍数所在的位置,假设从小到大所在的位置为a[0],a[1]...a[k],那么只需要有a[0],a[1]存在或者a[k-1],a[k]存在或者a[0],a[k]存在,然后其它区间乱删都没有关系。 那么现在的问题就在于“区间乱删”时,会有好多之前已经计算过的答案被算了多次,显然是不行的。 仔细思考我们要解决什么问题,现在我们需要做的事情就是给定一个区间l,r求l,r中 剩余的 子区间还有多少个。 那我们先对于每一个位置i,记t[i]表示[i,i],[i,i+1]...[i,t[i]]这些区间已经被算过了。不难发现t[i]是单调的,因为如果大区间算过了,小区间一定也被算过了。 那么l,r中 剩余的 子区间还有多少个要如何计算呢,其实答案就是[l,r]中,对于所有满足(t[i]<=r)的i,r-t[i]的总和。由于t[i]是单调的,所以在线段树上二分一下再求个和就行了。 接下来我们把[l,r]中所有t[i]<=r的设置为t[i]=r,这依然可以线段树解决。于是就做完了这道题。 #include<cstdio> #include<algorithm>

markdown公式语法

烈酒焚心 提交于 2020-02-03 13:11:08
#Cmd Markdown 公式指导手册 标签: Tutorial 点击跳转至 Cmd Markdown 简明语法手册 ,立刻开始 Cmd Markdown 编辑阅读器的记录和写作之旅! 本文为 MathJax 在 Cmd Markdown 环境下的语法指引。 Cmd Markdown 编辑阅读器支持 LaTeX \LaTeX L A T E ​ X 编辑显示支持,例如: ∑ i = 1 n a i = 0 \sum_{i=1}^n a_i=0 ∑ i = 1 n ​ a i ​ = 0 ,访问 MathJax 以参考更多使用方法。 右键点击每一个公式,选择 [Show Math As] → [TeX Commands] 以查看该公式的命令详情。 文章目录 @[toc] 一、公式使用参考 1.如何插入公式 一、公式使用参考 1.如何插入公式 LaTeX \LaTeX L A T E ​ X 的数学公式有两种:行中公式和独立公式。行中公式放在文中与其它文字混编,独立公式单独成行。 行中公式可以用如下方法表示: $ 数学公式 $ 独立公式可以用如下方法表示: $$ 数学公式 $$ 自动编号的公式可以用如下方法表示: 若需要手动编号,参见 大括号和行标的使用 。 \begin{equation} 数学公式 \label{eq:当前公式名} \end{equation}

剑指Offer之字符串的排列

半世苍凉 提交于 2020-02-03 08:40:26
题目描述    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 基本思路   求整个字符串的排列,可以分为两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有字符交换。第二步固定第一个字符,求后面所有字符序列。这个时候我们把后面的字符分成两部分:后面字符的第一个字符以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换。 Java代码 package com.swordOffer.stringPermutation19; import java.util.ArrayList; import java.util.Scanner; import java.util.TreeSet; /** * Created by Feng on 2017/5/16. * 题目描述 * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 * 输入描述: * 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 */

SQLite进阶-18.事务

孤人 提交于 2020-02-03 04:35:24
目录 SQLite事务 事务的属性 事务控制 BEGIN TRANSACTION命令 COMMIT命令 ROLLBACK命令 SQLite事务 事务(Transaction) 是一个对数据库执行工作单元。事务是以逻辑顺序完成的工作单元或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。 事务是指一个或者多个改变数据库的扩展。例如:如果你正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么你正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。 实际上,你可以把许多的SQLite查询联合成一组,把所有这些放在一起作为事务的一部分进行执行。 事务的属性 事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为ACID: 原子性(Atomicity) : 确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。 一致性(Consistency) : 确保数据库在成功提交的事务上正确的改变状态。 隔离性(Isolation) : 使事务操作相互独立和透明。 持久性(Durability) : 确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。 事务控制 使用下面的命令来控制事务: BEGIN TRANSACTION: 开始事务处理。 COMMIT: 保持更改,或者可以使用END

PLSQL——08、包

人走茶凉 提交于 2020-02-03 01:08:52
包头 声明包体的内容,里面声明的变量或类型,作用范围是全局的。定义了过程或函数的时候,这个函数也可以被外界使用,如果包头中没定义包体中的函数或过程,这时函数和过程就是这个包私有的。创建时不需要写begin,即使有begin内容也只在编译是执行一次。 格式如下: create or replace package P_NAME is|as xxx; end; 包体 包含这个包的功能(函数+过程),包头定义的函数或者过程必须出现在包体中;而且,包体的包参数上要和包头中的声明完全一致(参数名和参数数据类型),否则就不是同一个对象。 格式如下: procedure xxx(a number,b varchar2(10)) is ...... begin ...... end; 包的创建 创建包头和包体是同名字的,但创建的关键字不同,如: 包头:create package NAME 包体:create package body NAME 演示如下: --创建package header CREATE OR REPLACE PACKAGE emp_pack IS PROCEDURE new_emp (v_ename emp.ename%TYPE, v_job emp.job%TYPE DEFAULT 'SALESMAN', v_mgr emp.mgr%TYPE DEFAULT 7839, v

latex学习笔记----基本知识、文档排版

你。 提交于 2020-02-03 00:31:07
1、空格和制表符等空白字符视为相同的空白距离,多个连续的空白字符等同为一个字符。 2、# $ % ^ _ { } ~ 在这些字符前面加上反斜线,就可以在文本中得到它们。 反斜线\不能在前面添加反斜线的得到,\\是一个用来断行的命令 3、注释 % 4、\documentclass{...}和\begin{document}之间的区域称作导言区 \documentclass{article} \begin{document} Small is big \end{document} 5、文档布局 \documentclass[options]{class} class指明了所要创建的文档类型 class有一下几种:article(排版科技期刊、短报告、程序文档、邀请函)、report(排版多章节的长报告,短篇的书籍,博士论文等)、 book(排版书籍)、 slides(排版幻灯片) 10pt,11pt,12pt设置文档所用的字体的大小 a4paper,letterpaper...设置纸张的大小 fleqn 数学公式左对齐 6、调入宏包,\usepackage[options]{package} 7、特殊字符和符号: 引号:两个 ' ' 而不是“ 波折号和连字号 :用不同数目的短划可以得到 - -- --- 波浪号~:$\sim$demo ~demo ° 度的符号:$-30\,^{