sum

! BJOI2018链上二次求和

﹥>﹥吖頭↗ 提交于 2020-03-27 11:31:13
此题实际就是序列上的问题(只是链的话不一定 \(u<v\) ,判一下) \(ans=\sum_{i=l}^r\sum_{j=i}^ns_j-s_{j-i}=\sum_{i=l}^r(\sum_{j=i}^ns_j-\sum_{j=0}^{n-i}s_j)\) 改成二维前缀和 \(ans=\sum^r_{i=l}ss_n-ss_{i-1}-ss_{n-i}\) 用线段树维护二维前缀和即可(肯定是一个二次函数,拆开算贡献即可) 时间复杂度 \(O(nlog_n)\) #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return f==1?x:-x; } #define ll long long #define lc (p<<1) #define rc (p<<1|1) const int N=2e5+4,mod=1e9+7,inv2=5e8+4; int n,m,a[N],la[N<<2],lb[N<<2],le[N<<2],t[N<<2]

3。26作业

流过昼夜 提交于 2020-03-27 08:25:19
1、文件内容如下,标题为:姓名,性别,年纪,薪资 ​ egon male 18 3000 ​ alex male 38 30000 ​ wupeiqi female 28 20000 ​ yuanhao female 28 10000 要求: 从文件中取出每一条记录放入列表中, 列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式 with open('db.txt','rt',encoding='utf8') as f: user_info = [] for line in f: name,sex,age,salary=line.strip().split() info = [name,sex,int(age),int(salary)] user = {k:v for k,v in zip(['name','sex','age','salary'],info)} user_info.append(user) print(user_info) 2、根据1得到的列表,取出薪资最高的人的信息 max_salary_info = max(user_info,key=lambda k:k['salary']) print(max_salary_info) 3 、根据1得到的列表,取出最年轻的人的信息 youngest

JavaScript在HTML中的应用

限于喜欢 提交于 2020-03-27 06:48:56
JavaScript概述 JavaScript是基于对象和事件驱动的脚本语言,主要应用在客户端。 特点: 1,交互性(它可以做的就是信息的动态交互) 2,安全性(不允许直接访问本地硬盘) 3,跨平台性(只要是可以解释JS的浏览器都可以执行,和平台无关) JavaScript与Java不同 1,JS是Netscape公司的产品,前身是LiveScript;Java是Sun公司的产品,现在是Oracle公司的产品 2,JS是基于对象,Java是面向对象 3,JS只需解释就可以执行,Java需要先编译成字节码文件,再执行 4,JS是弱类型,Java是强类型 JavaScript与Html的结合方式 想要将其他代码融入到Html中,都是以标签的形式。 1,JS代码存放在标签对<script> js code... </script>中。 2,当有多个html页面使用到相同的JS脚本时,可以将JS代码封装到一个文件中,只要在script标签的src属性引入一个JS文件。(方便后期维护、扩展) 注意:如果在script标签中定义了src属性,那么标签中的内容不会被执行。 例:<script src="test.js" type="text/javascript"></script> 注:规范中script标签早期有一个属性language,而现在使用type属性。 JavaScript语法

3.26作业

我怕爱的太早我们不能终老 提交于 2020-03-26 23:42:53
# 1、文件内容如下,标题为:姓名,性别,年纪,薪资# egon male 18 3000# alex male 38 30000# wupeiqi female 28 20000# yuanhao female 28 10000## 要求:# 从文件中取出每一条记录放入列表中,# 列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式l=[]with open('db.txt','r',encoding='utf-8')as f: for line in f : dic = {} name, sex, age, salary = line.strip().split() dic['name'] = name dic['sex'] = sex dic['age'] = int(age) dic['salary'] = int(salary) l.append(dic) print(l)# 2 根据1得到的列表,取出薪资最高的人的信息# s=max(l,key=lambda k:k['salary'])# print(s)# 3 根据1得到的列表,取出最年轻的人的信息# res=min(l,key=lambda k:k['age'])# print(res)# 4、将names=['egon','alex_sb'

洛谷 P2602(数位DP)

房东的猫 提交于 2020-03-26 18:58:38
### 洛谷 P2602 题目链接 ### 题目大意: 给你一个区间,问你区间所有数字中,0、1、2 .... 9 的个数的总和分别为多少。 分析: 枚举 0 ~ 9 进行数位 DP 即可。 注意记忆化搜索: 必须要用到第二维来表示,前 1 ~ pos 位,某个数(0 ~ 9)的个数。 例如,我们在求这个区间中 2 的个数,直接看的话,后 pos 位 的 2 的个数好像与 1 ~ pos位 上有多少个 2 并无联系(在 !limit 情况下),那为什么还要开第二维呢? 实际算上来你会发现:比如当枚举到 222 这个数时,很显然 pos==0 后,2 的总个数(即 sum)为 3 。而如果我们枚举到 第 2 位 (十位上)时,用到的记忆化是 dp[2] ,它只记录的是后两位中,有 22 这个数,即两个 2 ,而实际我们求 222 时,应该使程序返回的是 sum== 3 。故我们需要记忆化 dp[2][1] ,让在前 1 ~ pos 位已有一个 2 的时候,返回 sum== 3 (即这个 1 最后会再加上后面两个 2 的个数 ,对应的是 22 ) 代码如下: #include<iostream> #include<algorithm> #include<string.h> using namespace std; typedef long long ll; ll n,m; int a

CAS的缺点和问题解决

▼魔方 西西 提交于 2020-03-26 11:07:20
3 月,跳不动了?>>> 在并发编程中CAS的缺点和问题,如ABA问题,自旋锁消耗问题、多变量共享一致性问题 ABA: 问题描述:线程t1将它的值从A变为B,再从B变为A。同时有线程t2要将值从A变为C。但CAS检查的时候会发现没有改变,但是实质上它已经发生了改变 。可能会造成数据的缺失。 解决方法:CAS还是类似于乐观锁,同数据乐观锁的方式给它加一个版本号或者时间戳,如AtomicStampedReference 自旋消耗资源: 问题描述:多个线程争夺同一个资源时,如果自旋一直不成功,将会一直占用CPU。 解决方法:破坏掉for死循环,当超过一定时间或者一定次数时,return退出。JDK8新增的LongAddr,和ConcurrentHashMap类似的方法。当多个线程竞争时,将粒度变小,将一个变量拆分为多个变量,达到多个线程访问多个资源的效果,最后再调用sum把它合起来。 虽然base和cells都是volatile修饰的,但感觉这个sum操作没有加锁,可能sum的结果不是那么精确。 public long sum() { Cell[] as = cells; Cell a; long sum = base; if (as != null) { for (int i = 0; i < as.length; ++i) { if ((a = as[i]) != null) sum

生成函数与指数生成函数

*爱你&永不变心* 提交于 2020-03-26 09:21:29
普通型生成函数GF: 序列 \({a_i}\) 的生成函数为 \(\sum\limits_{i=0}^{\infty}a_ix^i\) 常用GF的收敛形式: 1. \(\sum\limits_{i=0}^{\infty}x^i=\frac{1}{1-x}\) ,序列 \({1}\) 的生成函数 2. \(\sum\limits_{i=0}^{\infty}\binom{n}{i}x^i=(1+x)^n\) ,序列 \({\binom{n}{i}}\) 的生成函数,就是二项式定理 3. \(\sum\limits_{i=0}^{\infty}\binom{n+i-1}{i}x^i=\frac{1}{(1-x)^n}\) ,序列 \({\binom{n+i-1}{i}}\) 的生成函数,就是广义二项式定理 4. \(\sum\limits_{i=0}^{\infty}(i+1)x^i=\frac{1}{(1-x)^2}\) ,为3中n=2的特殊形式 指数型生成函数EGF: 序列 \({a_i}\) 的生成函数为 \(\sum\limits_{i=0}^{\infty}\frac{a_ix^i}{i!}\) 常用EGF的收敛形式: 1. \(\sum\limits_{i=0}^{\infty}\frac{x^i}{i!}=e^x\) ,序列 \({1}\) 的生成函数 2. \(\sum

bzoj 2694: Lcm

淺唱寂寞╮ 提交于 2020-03-25 23:43:05
LINK: LCM T组数据, \(T\leq 10000\) \(A,B\leq 4000000\) 简述一下这道题的式子:A,B用n,m来代替 \(\sum_{i=1}{n}\sum_{j=1}^{m}\mu((i,j))^2LCM(i,j)\) 我们可以简单推式子 推出: \(\sum_{w=1}^{n}w\cdot S(\frac{m}{w})\cdot S(\frac{n}{w})\cdot\sum_{x|w}x\cdot\mu(x)\mu(\frac{w}{x})^2\) 其中S(x)表示 \(\sum_{i=1}^xi\) 我们发现预处理后面的前缀和即可。 由于A B 最大4e6 这显然是在卡nlnn的算法 我们考虑线性筛出后面的东西。 设f(w)表示 \(\sum_{x|w}x\cdot\mu(x)\mu(\frac{w}{x})^2\) 那么f(w)其实是一个积性函数。 考虑 当w里存在p的时候 怎么筛 由于f(p^3)为0 p的更高次项也为0 那么f(p)=1-p,f(p^2)直接由f(p)*f(p)类似的式子计算即可。 这算是一个小trick吧 当w存在p的时候 我们还是可以通过除以p来获取互质 从而利用积性函数的性质来求答案。 由于答案对 \(2^30\) 取模 但是我们可以开unint 对 \(2^32\) 取模 最后 拿出后面的30位数即可。 const

python 缩进问题

半城伤御伤魂 提交于 2020-03-25 04:37:56
/*--> */ /*--> */ 介绍 在python中认为规定4个空格缩进,缩进的代码可以理解成一个块,但是使用缩进也需要注意有时不一样的缩进产生的结果会不一样,接下来就来看一个列子 一、for...in循环 例:自定义一个函数 ,最后返回传入值的平方相加 def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum print (calc([1,2,4])) 上面的代码返回了正常在值:21 接下来把代码稍微改一下 def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum print (calc([1,2,4])) 现在返回的值又是什么呢:结果返回1 为什么会返回1,仔细分析一下,代码我将return进行了缩进,这时return是基于for的每一个循环返回一个值,并且return当第一个条件满足时就不在往下执行了,所以当传入第一个1时,sum=0+1*1=1,return 1就不再进行后面的循环了。而return不缩进那么return和for是同一级,当所有的for执行完后才执行return然后返回最终的结果 用将return替换成print更容易理解 def calc(numbers): sum = 0

mysql HAVING用法

这一生的挚爱 提交于 2020-03-24 14:42:53
原文链接:https://www.cnblogs.com/mr-wuxiansheng/p/11188733.html having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。 而having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数产生的。 一、显示每个地区的总人口数和总面积. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中 的不同字段(一或多条记录)作运算。 二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。 SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000 在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。 相反,having子句可以让我们筛选分组后的各组数据 三、 having单独使用,与where类似 eg: 查询单笔订单充值金额大于1000的 SELECT