題意:每一顆星星有一定的亮度值,現在座標系中有許多星星,每個星星的座標及亮度值已經給定,求一個矩形能夠框住的最大值。Lazy 標記。題解:對每一顆星星,畫出以它為左下角的矩形,這個矩形就是它的影響範圍。為了方便處理,我們將每一顆星分作兩顆,frist_star ( x, y, val ), second_star ( x + w, y, -val ),這樣當我們不斷插入星星的時候,其實就相當於有一個矩形框在從左往右移動,因為碰到 first_star 則總亮度加上 val
題意:本題目包含多組測試,請處理到檔案結束。在每個測試的第一行,有兩個正整數 N 和 M ( 0<N<=200000,0<M<5000 ),分別代表學生的數目和操作的數目。學生ID編號分別從1編到N。第二行包含N個整數,代表這N個學生的初始成績,其中第i個數代表ID為i的學生的成績。接下來有M行。每一行有一個字元 C (只取'Q'或'U')
題意:求矩形的面積並。題解:求矩形的並,由於矩形的位置可以多變,因此矩形的面積一下子不好求這個時候,可以採用“分割”的思想,即把整塊的矩形面積分割成幾個小矩形的面積,然後求和就行了這裡我們可以這樣做,把每個矩形投影到 y 座標軸上來然後我們可以枚舉矩形的 x 座標,然後檢測當前相鄰 x 座標上 y 方向的合法長度,兩種相乘就是面積 然後關鍵就是如何用線段樹來維護那個 “合法長度”可以這樣來搞線段樹的節點這樣定義struct node { int left,right,cov; double
題意:給定一個環形的序列,值可正可負,求最大的連續子序列。(每次更新都需要輸出結果,最多包含N-1個點)。#include <iostream>using namespace std;#define N 100005int pot[N];struct item{int sum;int lmax,lmin;int rmax,rmin;int submax, submin;int left, right;} node[N*6];int max ( int a, int b
題意:給定一個由座標系構成的柿子樹林,有的座標點上存在柿子樹,有的不存在。現在準備送給你一塊土地,土地的長和寬已經確定,怎麼選才能使給你的土地上的柿子樹最多。題解:這道題和 2482 Stars in Your Window 頗為相似。下面給出了三種解法。方法一:DP#include <iostream>using namespace std;#define N 103int sum[N][N];bool flag[N][N];int main(){int n, w, h, s,
題意:一根木棍的兩端都塗有顏色,現在有一系列的木棍,問能否將它們連成一條直線,使兩木棍的結合點處顏色一致。解法:以顏色為節點,木棍為邊。 通過字典樹給顏色編號,然後通過並查集來檢驗圖的連通性,最後統計每種顏色的度,判斷是否是歐拉圖或者歐拉半圖。#include <iostream>using namespace std;const int kind = 26;const int MAX = 500005;int color[MAX], father[MAX];int
題意:敵兵陣地上有編號 1 - n 的營地, 每個營地的人員會增加或者減少。題中有四種操作。(1) Add i j,i和j為正整數,表示第i個營地增加j個人(j不超過30)(2)Sub i j ,i和j為正整數,表示第i個營地減少j個人(j不超過30);(3)Query i j ,i和j為正整數,i<=j,表示詢問第i到第j個營地的總人數;(4)End 表示結束,這條命令在每組資料最後出現;題解:#include <cstring>#include
題意:一條長鏈子上面有許多鉤子,一次編號 1 - n ,每個鉤子有金銀銅三種材質(3,2,1),假設一開始全是銅質的,每次操作可以將 x - y 範圍內的鉤子變成 z 材質.求最後整條鏈子的值。題解:lazy標記#include <cstring>#include <iostream>using namespace std;#define L(u) ( u << 1 )#define R(u) ( u << 1 | 1 )#define N 100