POJ 2482 Stars in Your Window 線段樹

題意:每一顆星星有一定的亮度值,現在座標系中有許多星星,每個星星的座標及亮度值已經給定,求一個矩形能夠框住的最大值。Lazy 標記。題解:對每一顆星星,畫出以它為左下角的矩形,這個矩形就是它的影響範圍。為了方便處理,我們將每一顆星分作兩顆,frist_star ( x, y, val ),  second_star ( x + w, y, -val ),這樣當我們不斷插入星星的時候,其實就相當於有一個矩形框在從左往右移動,因為碰到 first_star 則總亮度加上 val

HDU 1754 I Hate It 線段樹

題意:本題目包含多組測試,請處理到檔案結束。在每個測試的第一行,有兩個正整數 N 和 M ( 0<N<=200000,0<M<5000 ),分別代表學生的數目和操作的數目。學生ID編號分別從1編到N。第二行包含N個整數,代表這N個學生的初始成績,其中第i個數代表ID為i的學生的成績。接下來有M行。每一行有一個字元 C (只取'Q'或'U')

HDU 1823 Luck and Love 二維線段樹 / 矩形樹

題意:本題有多個測試資料,第一個數字M,表示接下來有連續的M個操作,當M=0時處理中止。接下來是一個操作符C。當操作符為‘I’時,表示有一個MM報名,後面接著一個整數,H表示身高,兩個浮點數,A表示活潑度,L表示緣分值。 (100<=H<=200, 0.0<=A,L<=100.0)當操作符為‘Q’時,後面接著四個浮點數,H1,H2表示身高區間,A1,A2表示活潑度區間,輸出符合身高和活潑度要求的MM中的緣分最高值。 (100<=H1,H2<=200, 0.0&

hdu 1087 最長子序列

#include<stdio.h>int  str[1001],sum[1001];int main(){int n,i,max;// freopen("e://2.txt","r",stdin);    while(scanf("%d",&n)!=EOF&&n){   scanf("%d",&str[0]);  sum[0]=str[0];  for(i=1;i<n;i++)  {  scanf("%d",str+i);         

POJ 2777 Count Color 線段樹

 題意:對長木板進行塗色,有兩種操作, 一種插入,一種統計,輸出一定範圍內的顏色種數。#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define L(u) (u<<1)#define R(u) (u<<1|1)#define N 150000struct TreeNode { int l,r,c;};TreeNode node[N*3];

POJ 1151 Atlantis 線段樹/矩形面積並

題意:求矩形的面積並。題解:求矩形的並,由於矩形的位置可以多變,因此矩形的面積一下子不好求這個時候,可以採用“分割”的思想,即把整塊的矩形面積分割成幾個小矩形的面積,然後求和就行了這裡我們可以這樣做,把每個矩形投影到 y 座標軸上來然後我們可以枚舉矩形的 x 座標,然後檢測當前相鄰 x 座標上 y 方向的合法長度,兩種相乘就是面積 然後關鍵就是如何用線段樹來維護那個 “合法長度”可以這樣來搞線段樹的節點這樣定義struct node { int left,right,cov; double

POJ 3080 Blue Jeans KMP

題意: 輸入M個定長為60的DNA序列(字串),求M條DNA的最長公用子序列,若有最長的公用子序列有若干條,則輸出字典序最小的。顯然是一個字串匹配問題。第一次用KMP演算法。幸好看了嚴蔚敏老師的資料結構視頻(第11,12),講的很細。題解:需要注意輸出字典序最小的模式序列#include <stack>#include <cstring>#include <iostream>using namespace std; #define M

POJ 2828 Buy Tickets 線段樹

題意:買火車票時總有人插隊,每人有兩個屬性,插入位置pos[i] (pos[i]代表此人前面的總人數),以及人物編號 value[i]。在每一輪輸入後,按隊伍順序輸出人物的編號。題解:處理點的線段樹。從後往前推,則可以避免後來人對pos的影響,這樣一來每個人的pos都是精確的。 #include <iostream>using namespace std;#define MAX 200005int pos[MAX], value[MAX], out[MAX];struct item{

HDU 1255 覆蓋的面積 線段樹

題意:給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的地區的面積.題解:和 poj1151 類似,不過要求的是面積的交,同樣是先離散化然後枚舉x座標。此題更新時求y方向的“合法長度”相對於 poj1151 還有些區別, 值得比較比較。並且用lazy貌似也不合適,必須跟新至單元,因為每個節點既受父節點影響,也受子節點影響。len[1]是覆蓋一次的長度,len[2]是覆蓋次數>= 2的長度。當node[u].cover>1時,node[u].len[1] = 0            

POJ 2750 Potted Flower 線段樹+DP

題意:給定一個環形的序列,值可正可負,求最大的連續子序列。(每次更新都需要輸出結果,最多包含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

HUD 1828 Picture 矩形周長/線段樹

題意:求重疊矩形的周長。題解:枚舉x區間時要注意求出, y 軸投影的線段數量。 即對應一個 x 有多少段不連續的線段,因為這關係的矩形的寬。 對 x 進行排列要記得入邊在前,出邊在後,否則邊相交的兩個矩形,就會把重邊也計算在內。#include <cmath>#include <algorithm>#include <iostream>using namespace std;#define L(x) ( x << 1 ) #define R(x)

POJ 3349 Snowflake Snow Snowflakes hash

題意:每個雪花有六個角,每個角用一個數字表示。輸入n個雪花,若存在兩個雪花相等則輸出Twin snowflakes found。否則輸出No two snowflakes are alike.題解:hash#include <iostream>#include <cstdlib>using namespace std;#define Prime 14997struct ListNode{int a[6];struct ListNode *next;};struct

POJ 2029 Get Many Persimmon Trees DP/二維樹狀數組/線段樹

題意:給定一個由座標系構成的柿子樹林,有的座標點上存在柿子樹,有的不存在。現在準備送給你一塊土地,土地的長和寬已經確定,怎麼選才能使給你的土地上的柿子樹最多。題解:這道題和 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,

POJ 2513 Trie樹+並查集

題意:一根木棍的兩端都塗有顏色,現在有一系列的木棍,問能否將它們連成一條直線,使兩木棍的結合點處顏色一致。解法:以顏色為節點,木棍為邊。 通過字典樹給顏色編號,然後通過並查集來檢驗圖的連通性,最後統計每種顏色的度,判斷是否是歐拉圖或者歐拉半圖。#include <iostream>using namespace std;const int kind = 26;const int MAX = 500005;int color[MAX], father[MAX];int

POJ 3264 Balanced Lineup RMQ / 線段樹

題意:給出一個隊列,找出指定區間的最大值與最小值。題解:RMQ, 注意邊界需要理清楚。參考http://www.cnblogs.com/cnjy/archive/2009/08/30/1556566.html    RMQ(Range Minimum/Maximum Query)問題:  

HDU 1166 敵兵布陣 線段樹

題意:敵兵陣地上有編號 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

HDU 4004 The Frog’s Games 二分+貪心

題意:在青蛙的世界裡有一項競賽,要求青蛙在給定的跳躍次數M 以內跳過河。我們預Crowdsourced Security Testing道河寬L,河上有N塊石頭,青蛙可以在石頭上停留。求青蛙的每次跳躍至少跳多遠才能順利過河。題解:當青蛙跳長等於河寬L時它一定能跳過河。那麼通過二分跳長,求出能過河的最短跳長。#include <algorithm>#include <iostream>using namespace std;int L, n, m;int stone[500

POJ 3368 Frequent values RMQ / 線段樹

題意;給定一個升序的數列(1-100000), 比如 array[10] =  -1  -1  1  1  1  1  3  10  10  10, 求其中某段區間上相同的數字最多有幾個。[ 2, 3 ] = 1, [ 1, 10 ] = 4, [ 5, 10 ] = 3。(下標從1開始)。題解:先將連續相等的幾個數合并為一個部分(part), 或者說一個點。每點包括了起始位置,終止位置,相等元素個數三個資訊。            查詢的時候需要整點的查詢,假設對區間 [ a, b ] 查詢

二分圖帶權匹配

KM演算法是通過給每個頂點一個標號(叫做頂標)來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點Xi的頂標為A[i],頂點Yi的頂標為B[i],頂點Xi與Yj之間的邊權為w[i,j]。在演算法執行過程中的任一時刻,對於任一條邊(i,j),A[i]+B[j]>=w[i,j]始終成立。KM演算法的正確性基於以下定理:  若由二分圖中所有滿足A[i]+B[j]=w[i,j]的邊(i,j)構成的子圖(稱做相等子圖)有完備匹配,那麼這個完備匹配就是二分圖的最大權匹配。  這個定理是顯然的。因為對

HDU 1698 Just a Hook 線段樹

題意:一條長鏈子上面有許多鉤子,一次編號 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

總頁數: 61357 1 .... 13178 13179 13180 13181 13182 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.