
线段树
mvpmvpokhddbuydg
这个作者很懒,什么都没留下…
展开
-
P1502 窗口的星星题解(扫描线)
知识点:线段树+扫描线看了看这道题的x,y的数据范围,固定离散化。注意避坑,方框上的不算。题目的大致意思是给若干个点,然后给个方框求怎么框才能框柱尽可能多的星星。我们要使用扫描线的时候通常是求面积并与周长并的时候,这题一眼看既没有面积也没有周长,所以该怎么创造面积或周长(估计不是)呢?先想一下怎样才算是框住了一个星星呢?我们先从简单的方面来理解这个问题,单单就一个框和一个星星而言,如果我们想要让它弄到的星星尽可能多,应当处于顶点和边缘,如果是左下方的顶点,矩形左下方的顶点应该应该是位于(x—x+w原创 2022-04-25 11:12:58 · 337 阅读 · 0 评论 -
HDU - 1754 I Hate It 题解(区间查询+单点修改)
知识点:线段树(单点修改+区间查询+简单最值)#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int num[200500],tr[900500];int n,m;char c;void bud_tr(int r,int lf,int rg){ if(lf==rg){ tr[r]=num[lf]; return ; } int lf_r=2*r;原创 2022-04-25 10:25:44 · 154 阅读 · 0 评论 -
[HDU-1698] Just a Hook题解(区间覆盖+区间查询)
知识点:线段树(区间覆盖+区间查询)#include<cstdio>using namespace std;typedef long long ll;struct tree{ int data; int tag;}tr[800600];ll n,q,cas;void bud_tr(ll r,ll lf,ll rg){ tr[r].tag=0; if(lf==rg){ tr[r].data=1;(全部赋值为1) return ; } ll lf_r=2*r;原创 2022-04-25 10:23:07 · 257 阅读 · 0 评论 -
HDU4027 Can you answer these queries题解
知识点:线段树(区间查询+区间修改)这道题不同于以往的增减或乘除,增减乘除都是有结合律的,但是开根号是木有的(可能是我孤陋寡闻),所以只能单点修改,但是的话它又是有一定规律的,所以可以类似剪枝般省去一些步骤。说明一下,这题并不难,但是非常非常坑qwd,坑点画红在下面#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;type原创 2022-04-25 10:18:55 · 143 阅读 · 0 评论 -
POJ - 2528 Mayor‘s posters题解 (线段树染色+离散化处理)
知识点:线段树(区间染色)思路:这个墙的长度很大,长达10000000,并且每组数据不会预先告诉你海报最远会铺到哪里,这样的话如果从头到尾整个墙进行建树等操作浪费的时间与空间都很大可以对点进行离散化———————————————————————————————————————什么是离散化离散化,就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。什么时候用当所给数据我们只需表示出它们之间的相对大小关系,原创 2022-04-25 10:12:06 · 166 阅读 · 0 评论 -
HDU - 1542 Atlantis(扫描线)题解
知识点:线段树+扫描线(这道题是扫描线的模板题)这道题如果用模拟实现会十分麻烦并且必然会爆(0<=x1<x2<=100000;0<=y1<y2<=100000)所以学点新知识吧QAQ不错的文章:扫描线入门理解从左到右进行遍历,然后的话以y的长度作为当前数组某点,某点的序号是x。需要计算的总面积可以拆分成图中阴影部分的面积之和, 这样如果从小往大枚举x的取值, 必然每两个x1与x2之间会有一个小矩形, 我们只需要把这些小矩形的面积加起来即可。同时,我们也可以从原创 2022-04-25 10:07:43 · 162 阅读 · 0 评论