题目链接:https://www.luogu.org/problem/P1502 扫描线的板子题,把每个点看成矩形,存下边(x,y,y+h-1,li)和(x+w-1,y,y+h-1),在按横坐标扫线段更新y区间,线段树维护区间最大值 #include<iostream> #include<algorithm> using namespace std; #define ll long long #define ls l,mid,rt<<1 #define rs mid+1…
P1502 窗口的星星 题目背景 小卡买到了一套新房子,他十分的高兴,在房间里转来转去. 题目描述 晚上,小卡从阳台望出去,"哇~~~~好多星星啊",但他还没给其他房间设一个窗户,天真的小卡总是希望能够在晚上能看到最多最亮的星星,但是窗子的大小是固定的,边也必须和地面平行.这时小卡使用了超能力(透视术)知道了墙后面每个星星的位置和亮度,但是小卡发动超能力后就很疲劳,只好拜托你告诉他最多能够有总和多亮的星星能出现在窗口上. 输入输出格式 输入格式: 本题有多组数据,第一行为\(T\)表示…
题目链接 P1502 窗口的星星 题解 扫描线+线段树 线段树的每一个节点处理的是左边框放在当前x-1位置时的框内星星的亮度大小 按照x坐标进行离散化,得到离散化后每一个坐标x的可影响的范围 维护扫描线,扫到可以加某颗星星就把星星加进去,扫到该出来的时候就把星星搞出来,线段树维护一下 代码 #include<cstdio> #include<cstring> #include<algorithm> const int maxn = 100007; int n,w,h;…
题目链接 把每个星星作为左下角,做出长为\(w-0.5\),宽为\(h-0.5\)的矩形. \(-0.5\)是因为边框上的不算. 离散化\(y\)坐标. 记录\(2n\)个\(4\)元组\((x,y1,y2,light)\),\(light\)指这颗星星的亮度,左正右负. 然后线段树每次在\([y1,y2]\)上加上\(light\),维护最大值即可. #include <cstdio> #include <cstring> #include <cmath> #incl…
题目链接或者这吧.. 被数据坑了 /* 操作按左端点排个序 依次进行即可 不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..) 找到Reason了..Modify下界写错 那么为什么单点修改正确性会被下界影响.. 又找到Reason了..数据有0 mmp */ #include<cstdio> #include<cctype> #include<algorithm> #define gc() getch…
BZOJ原题链接 洛谷原题链接 又是扫描线,题解可看大佬的博客(太懒了不想打) #include<cstdio> #include<algorithm> using namespace std; const int N = 1e5 + 10; const long long mod = 2147483648LL; struct dd { int x, y; }; dd a[N]; int ls_x[N], ls_y[N], sx[N], sy[N], S[N], C[N][12],…
To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 输入输出格式 输入格式: 输入一共有两行,第一行为n,k. 第二行为n个数(<INT_MAX). 输出格式: 输出共两行,第一行为每次窗口滑动的最小值…
我没有找到能在bzojAC的代码--当然我也WA了--但是我在洛谷过了,那就假装过了吧 minmax线段树一开始写的只能用min更新min,max更新max,实际上是可以互相更新的-- 首先看第二问,注意到因为没有相交,所以可以全都按某种顺序像同一个方向移动来完成游戏,这个顺序通过扫描线找到,用set维护经过当前x坐标的的线段的y坐标,具体用y=kx+b的形式维护,因为不相交,所以随着x的变化,线段的y点的大小关系不会改变:每次插入一个点的时候,找一下它的前驱后继,分别连边(这里的前驱后继就相当…
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个节点保存最大值和最小值即可. 注意点:①当s=1时可直接输出,否则会很慢:②查询操作不要返回值,我当时直接返回了struct,导致洛谷上TLE:③POJ上用C++提交,G++会TLE. C++ Code: #include<cstdio> #include<cctype> #defin…
没想到啊没想到,时隔两个月,我单调队列又懵了…… 调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!) 考前就不推新东西了,好好写写那些学过的东西 题目点这里(我就不粘了自己点一下看吧) 这题还有其他奇奇怪怪的做法,比如你可以当做RMQ,用线段树啊ST表啊随便你,不过单调队列就可以了 单调队列说到底就是个数据结构,就是维护数据的. 以当前这道题为例: 它维护的队列一定满足单调性,单调递增或递减,或者自定义一个单调性. 如何维护呢,假设当前队尾为q [ tail ], 要插入元…