The Street 思路: 动态开节点线段树: 等差序列求和于取大,是两个独立的子问题: 所以,建两颗线段树分开维护: 求和:等差数列的首项和公差直接相加即可: 取大: 对于线段树每个节点储存一条斜率为等差数列公差的线段: 当添加线段到已有线段的节点,下传一条线段,当前节点留下一条线段: 当要添加的线段完全覆盖或者被覆盖当前节点储存的线段时,选择更新或者不更新: 单点查询时,从根节点到叶节点的路径上去最大值: 来,上代码: #include <cstdio> #include <cst…
The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submissions for this problem are available. Read problems statements in Mandarin Chineseand Russian. The String street is known as the busiest street in Cod…
题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结论入手,每个点的度恰好为1,那么就意味着每个点只能连接一个点,这样问题就转化为图中的点能否刚好两两配对. 对于奇数个点肯定是不行的,因为一定存在一个点不存在与之配对的点.    如果点是偶数,那么就要求这个图的最大匹配,看匹配树是否为点数的一半. 求匹配的方法和二分图类似,不断找增广路更新匹配数就好…
https://www.codechef.com/problems/FNCS [题意] [思路] 把n个函数分成√n块,预处理出每块中各个点(n个)被块中函数(√n个)覆盖的次数 查询时求前缀和,对于整块的分块求和,剩下右边不构成完整的一个块的树状数组求和 预处理:计算每个块中,序列中的第i个点被块中函数覆盖的次数,求出每个块内前缀的和(O(n√n)):对于每个点,更新树状数组(nlogn) 单点修改:对于块状数组,因为已经知道了每个点被覆盖的次数,所以维护很简单(O(√n));对于树状数组,直…
重点回忆下我觉得比较有意义的题目吧.水题就只贴代码了. Distinct Characters Subsequence 水. 代码: #include <cstdio> #include <iostream> #include <map> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <vect…
[问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N.这N块木板中,有M块木板前面放着一桶油漆.油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z).而你要求Czy用他的油漆刷子给栅栏刷上油漆. 已知Czy会选择一个前方放有油漆桶的木板开始他的任务.刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围.随机地走…
问题描述 Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N.这N块木板中,有M块木板前面放着一桶油漆.油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z).而你要求Czy用他的油漆刷子给栅栏刷上油漆. 已知Czy会选择一个前方放有油漆桶的木板开始他的任务.刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围.随机地走表示…
Chef and Apple Trees Chef loves to prepare delicious dishes. This time, Chef has decided to prepare a special dish for you, and needs to gather several apples to do so. Chef has N apple trees in his home garden. Each tree has a certain (non-zero) num…
传送门 \(CHNUM\) 显然正数一组,负数一组 for(int T=read();T;--T){ n=read(),c=d=0; fp(i,1,n)x=read(),x>0?++c:++d; if(!c)c=d;if(!d)d=c; if(c<d)c^=d^=c^=d; printf("%d %d\n",c,d); } \(CHDIGER\) 从原来的数列中选出字典序最小的上升子序列,往后面加\(d\)就行了 //minamoto #include<bits/st…
@(XSY)[分塊, 倍增] Description There's a new trend among Bytelandian schools. The "Byteland Touristic Bureau" has developed a new project for the high-schoolers. The project is so-called "Children's Trips". The project itself is very simpl…