最近要毕业了,有半年没做比赛了.
这次参加百度之星的初赛娱乐一下.
现在写一下解题报告.
还是先看看四道题的类型吧
1.Scenic Popularity 暴力 复杂度O( 100 * 100 * 10000 ) 或者O( T * K * R) 线段树
2.Chess DP 复杂度 O(n^2)
3.Best Financing DP 复杂度O(n)
4.JZP Set 数论或DP 复杂度 O(n * log(n))...
分类:
其他好文 时间:
2014-06-04 23:35:07
阅读次数:
219
当一道题目,使用__int64超时,使用int就能A的时候,我想,这个题,不是一个好题。。。。。
add[i]:记录加的lazy标记
mul[i]:记录乘的lazy标记
num[i]:记录数的lazy标记
sum[i][j]:第i段,j次方的和。
除去lazy标记的下放,这完全就是一道水的线段树的题目。。。
lazy标记如何下放呢?
1,首先查看num标记,如果存在,果断下放。
2...
分类:
其他好文 时间:
2014-06-04 21:41:27
阅读次数:
343
以前用树状数组做过一次,现在用线段树再刷一次。。。
首先必须先离散化。。。
然后建立2颗线段树,第一颗表示往左走,每个节点的值的分布。
第二颗表示往右走,每个节点的值的分布。
然后根据左右走的关系,判断出x,y的值。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#inclu...
分类:
其他好文 时间:
2014-06-03 01:25:54
阅读次数:
315
从一开始学离散化就对它没有半毛钱好感,感觉出这种题纯属恶心人。
可以将Top x全部取出来然后离散化,缩点。剩下的就是伸展了,不再赘述。
也有人拿线段树过,一直没有想明白. . .
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment...
分类:
其他好文 时间:
2014-06-02 23:24:50
阅读次数:
338
线段树。注意h范围(小于等于n)。 1 #include 2 #include 3 4 #define
MAXN 200005 5 #define lson l, mid, rty) ? x:y 8 9 int nums[MAXN>1;24
build(lson);25 bu...
分类:
其他好文 时间:
2014-06-02 19:46:28
阅读次数:
183
这几天把毕业答辩的事弄完了,于是买票出来玩,结果周六是百度之星的复赛,于是我就没有办法来做比赛了,不过看了看题,目测可以过我两三道题.今天已经是比赛的第二天了,我还一直没有时间来A掉这些题,今晚抽空先把最简单的线段树那道题A了再说.题目说的很清楚了,自己看吧.有一棵树,树的每个点有点权,每次有三种操...
分类:
其他好文 时间:
2014-06-02 16:00:42
阅读次数:
225
这几天把毕业答辩的事弄完了,于是买票出来玩,结果周六是百度之星的复赛,于是我就没有办法来做比赛了,不过看了看题,目测可以过我两三道题.
今天已经是比赛的第二天了,我还一直没有时间来A掉这些题,今晚抽空先把最简单的线段树那道题A了再说.
题目说的很清楚了,自己看吧.
有一棵树,树的每个点有点权,每次有三种操作:
1. Query x 表示查询以x为根的子树的权值和。
2. Change x y 表示把x点的权值改为y(0<=y<=100)。
3. Root x 表示把x变为根。...
分类:
其他好文 时间:
2014-06-02 15:04:03
阅读次数:
298
注意到数列只增不减,而题目中又明确说道my then exit(x) else
exit(y); end;procedure build(x,y,k:longint); var mid:longint; begin with t[k] do
begin l:=x;r:=y; if ...
分类:
Web程序 时间:
2014-06-02 14:01:28
阅读次数:
247
题意:对数列有三种操作:
Print operation l,?r. Picks should write down the value of .
Modulo operation l,?r,?x. Picks should perform assignment a[i]?=?a[i] mod x for
each i (l?≤?i?≤?r).
Set operation k...
分类:
其他好文 时间:
2014-06-02 02:56:56
阅读次数:
465
记录3个变量。
sum[i]:当前区间被覆盖2次及两次以上的面积。
num[i]:当前区间被覆盖1次及一次以上的面积。
cover[i]:覆盖的lazy标记。
对于每一个区间.
更新操作如下:
void push_up(int_now)
{
if(cover[rt]==0)
{
num[rt]=num[rt<<1]+num[rt<<1|1];
...
分类:
其他好文 时间:
2014-05-31 17:58:57
阅读次数:
296