last

[APIO2019] [LOJ 3145] 桥梁(分块+并查集)(有详细注释)

浪子不回头ぞ 提交于 2019-11-28 06:12:23
[APIO2019] [LOJ 3145] 桥梁(分块+并查集)(有详细注释) 题面 略 分析 考试的时候就感觉子任务4是突破口,结果却写了个Kruskal重构树,然后一直想怎么在线用数据结构维护 实际上是离线算法。考虑只有查询的时候。我们可以离线对查询的权值从大到小排序,边也按边权从大到小排序,然后对于权值比询问大的边,把边两端结点集合合并。答案就是查询点所在点集的大小。只需要用并查集维护,然后双指针扫描,由于一条边只会被加进去一次,时间复杂度为$ O(n\log n)$ 考虑有修改的情况。所以我们可以对查询分块(按时间每B个询问分为一块),然后对每个块里的询问按上述方法暴力维护。最后还要更新块内修改操作,因为这些修改会对下一块有影响。注意修改会影响点集联通情况,用可撤销的并查集维护。.(因为每次操作都要把m条边扫描一遍).总复杂度 \(O(q\sqrt {q \log n} )\) 细节较多,注释见代码 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define maxn 500000 #define maxm 1000000 #define bsz 1000 using namespace std; inline void qread(int &x){ x=0; int

nginx基础详解

血红的双手。 提交于 2019-11-28 05:44:03
匹配这两种特殊字符“~”或“~*”的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~*”用于不区分大小写的匹配。还可以用逻辑操作符“!”对上面的匹配取反,即“!~”和“!~*”。此外,“^~”的作用是先进行字符串的前缀匹配(必须以后边的字符串开头),如果能匹配到,就不再进行其他location的正则匹配了。 6.5.2 location匹配示例 [root@localhost nginx]# cat /usr/local/nginx/conf/extra/www.conf server { listen 80; server_name www.yunjisuan.com; root /var/www/html/wwwcom; location / { return 401; } location = / { return 402; } location = /images/ { return 501; } location /documents/ { return 403; } location ^~ /images/ { return 404; } location ~* \.(gif|jpg|jpeg)$ { return 500; } } 正则匹配结果如下: [root@localhost nginx]# curl -s -o /dev/null -w "%{http

27.移除元素

*爱你&永不变心* 提交于 2019-11-28 02:49:43
class Solution: def removeElement(self, nums: List[int], val: int) -> int: # 定义两个指针,一个头,一个尾 i, last = 0, len(nums) - 1 while i <= last: # 判断头指针当前对应的列表中的值是否与val相等 # 若是,则头指针和尾指针对应的数进行调换 if nums[i] == val: nums[i], nums[last] = nums[last], nums[i] # 调换完成之后,尾指针向前移动 last -= 1 else: # 头指针向前移动 i += 1 return last + 1 来源: https://www.cnblogs.com/WJZheng/p/11387059.html

scrapy框架之items项目

老子叫甜甜 提交于 2019-11-28 02:42:44
Items   主要目标是从非结构化来源(通常是网页)提取结构化数据。Scrapy爬虫可以将提取的数据作为Python语句返回。虽然方便和熟悉,Python dicts缺乏结构:很容易在字段名称中输入错误或返回不一致的数据,特别是在与许多爬虫的大项目。   要定义公共输出数据格式,Scrapy提供Item类。 Item对象是用于收集所抓取的数据的简单容器。它们提供了一个 类似字典 的 API,具有用于声明其可用字段的方便的语法。   各种Scrapy组件使用项目提供的额外信息:导出器查看声明的字段以计算要导出的列,序列化可以使用项字段元数据trackref 定制,跟踪项实例以帮助查找内存泄漏(请参阅使用 trackref 调试内存泄漏)等。 声明项目 使用简单的类定义语法和Field 对象来声明项目。这里是一个例子: import scrapy class Product(scrapy.Item): name = scrapy.Field() price = scrapy.Field() stock = scrapy.Field() last_updated = scrapy.Field(serializer=str) 注意 熟悉Django的人会注意到Scrapy Items被声明为类似于Django Models,只是Scrapy Items比较简单,因为没有不同字段类型的概念

链表结构的反转(5)

时光毁灭记忆、已成空白 提交于 2019-11-28 02:12:16
链表结构反转的思想: 将一个链表分为3部分,head(头部分),mid(中间部分),last(最后部分); 反转前的顺序:head->mid->last; 反转后的顺序:last->mid->head; 因此,将last向head方向移动,head向last方向移动,最终使mid成为head的前结点,last成为mid的前结点。 llink inverllist(llink head) { llink mid,last; mid=NULL; //mid是head的前结点 while(head!=NULL) { last=mid; //last是mid的前结点 mid=head; head=head->next; //下一个结点 mid->next=last; //mid指向前结点last } return mid; } 举例如下, 链表的反转 #include " stdio.h " #include " stdlib.h " struct llist { int num; struct llist * next; }; typedef struct llist node; typedef node * llink; /* ------------链表的输出---------- */ void printllist( llink ptr) { while (ptr != NULL)

14 Find First and Last Position of Element in Sorted Array

佐手、 提交于 2019-11-28 01:36:00
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. Your algorithm's runtime complexity must be in the order of O(log n). If the target is not found in the array, return [-1, -1]. Example 1: Input: nums = [5,7,7,8,8,10], target = 8 Output: [3,4] Example 2: Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1] 还是用两头逼近的老办法,处理特殊情况的部分有点难看,不过程序运行的结果很不错,就不参考大神做法了。 class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ans = {-1,-1}; int len = nums.size(); if(len < 1) return ans; if(len ==

常用面试题(对应的知识点)

痴心易碎 提交于 2019-11-28 01:20:09
常用面试题(对应的知识点) 一、什么时候适合用computed,什么时候适合用watch 1、computed 属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。不可以在data中定义和赋值 2、watch ⑴监听data属性中数据的变化 ⑵监听路由router的变化 ⑶进行深度监听,监听对象的变化 <script> export default { data () { return { group: { data1: '1', data2: '2', data3: '3' } } }, watch: { group: { data1: function () { // do something }, // deep设为了true 如果修改了这个group中的任何一个属性,都会执行handler这个方法 deep: true }, // 有时候我们就想关心这个对象中的某个属性 'group.data3' (newVal) { console.log(newVal) } } } </script> 共同例子: <template> <div class="home"> <input type="text" v-model="name" /> <button type="button" @click="set">set</button> <p>Full name:{{

删除单链表中重复节点

て烟熏妆下的殇ゞ 提交于 2019-11-27 22:23:25
1 class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL)//当前指针为空 //或者链表就一个节点 return pHead; ListNode*head=new ListNode(0); //新建一个节点 头结点 指向当前这个 防止头结点也有被删除的可能; head->next=pHead; ListNode * pre=head; ListNode * last=head->next; while(last!=nullptr)//不是尾部 //用last工作指针后移 { if( last->next!=nullptr&&last->val==last->next->val) //last已经不是空指针 last next也不能是空指针 { // 找到最后的一个相同节点 while(last->next!=nullptr&&last->val==last->next->val) {last=last->next;} //连接 pre->next= last->next; //不换值 只换指向 last=last->next; } else //普通情况 { pre=last; last=last->next;/

UVALive - 5695 The Last Puzzle (思维+区间dp)

a 夏天 提交于 2019-11-27 22:02:57
题目链接 题目大意:有n个按钮排成一条直线,你的任务是通过左右移动按下所有按钮,按钮如果一段时间没有被按下就会被弹开。 以下是我的推论 (不一定正确) : 直观地看的话,如果选择的是最优路径,那么路径的形状必然是 若干条区域逐渐缩小的折线 ,如图所示: 而不可能出现这个样子: 因为,如果这样走的话,那么中间从A到B一段反复经过的区域就全都浪费了,不如直接从C走到D划算。 进一步观察可以发现,每一个按钮只有 最后一次被按下 的时候是有效的,因此答案序列应当是一个从两边向中间聚合的过程。 设dp[L][R][f]表示当前在区间[L,R]的左端点(f=0)或右端点(f=1),将区间[L,R]中的所有按钮全部按下所需的最短时间,每一步只有两种选择: 1.按下当前按钮并往前走一步,以后就都不管这个按钮了,此时$dp[L][R][0]=min(dp[L][R][0],dp[L+1][R][0])+dis[L+1]-dis[L]) $(以左端点为例,右端点类似,下同。dis[i]表示i点与左端点的距离) 2.跑到对面去准备按下对面的按钮,此时$dp[L][R][0]=min(dp[L][R][0],dp[L][R][1])+dis[R]-dis[L]) $ 总复杂度$O(n^2)$ 吐槽:ZOJ凉了,HDU后台有问题过不了,只能交到UVAlive上了,QAQ 1 #include<bits

『后缀自动机和后缀树』

那年仲夏 提交于 2019-11-27 21:32:51
前言 本博客仅记录个人对后缀自动机的一些理解,没有入门详细推导等内容。 可以参考这两篇博客: 后缀自动机 (SAM) 学习笔记 后缀自动机 (SAM) 理解 后缀自动机到底记录了什么?由于一个字符串的任意一个子串可以表达为某个前缀的后缀这样的形式,所以后缀自动机其实以一种高度压缩的形式保存了字符串所有子串的信息。 一点性质,后缀自动机最多只有 \(2*n-1\) 个状态, \(3n-4\) 条转移,这可能在开数组大小,或者多组测试数据清空的时候要注意到。 回顾一些知识: \(1.\) \(SAM\) 的状态和转移构成了一张有向无环图,称为 \(DAWG\) 。 \(2.\) \(SAM\) 的状态和后缀链接构成了一棵树,称为 \(parent\) 树。 \(3.\) 后缀自动机有唯一一个起始节点 \(s\) ,代表空串,起始节点 \(s\) 到任意一个终止状态路径上的所有转移恰好可以表示原串的一个后缀,原串的每一个后缀同样都可以被表示。 \(4.\) 后缀自动机每一个状态本质上代表了一个 \(endpos\) 等价类,又称为 \(right\) 集合。 \(5.\) 引理: 两个非空子串 \(|u|\) 和 \(|w|\) (假设 \(|u|<|w|\) )的 \(endpos\) 相同,当且仅当字符串 \(u\) 是 \(w\) 的后缀。 \(6.\) 引理: 两个非空子串 \(