本論文では主に線分樹を用いて維持する問題(最大区間と最大サブセグメントと最長連続上昇サブシーケンス)を紹介する.
HDU 1540 Tunnel Warfare(最長連続区間+単点修正)
洛谷P 894[USACO 08 FEB]ホテルHotel(最長連続区間+区間修正)
吉首大学2019年プログラム設計コンテスト-白山茶と紅バラ(最長連続区間+区間修正)
SPOJ-GS 1 Can 1 answer these queries I(最大サブセグメントと)
HU 3308 LCIS(区間最長連続上昇サブシーケンス)
HDU 1540 Tunnel Warfare(最長連続区間+単点修正)
三つの操作があります.
操作一:ある村は壊滅された.
操作の2:1つの村の座標を与えて、この村を含む最長の未被村の長さを求めます.
操作三:最後に破壊された村が修復されます.
まず、一番長い連続区間の長さを線分の木で維持したいです.今は1の代表的な変更点で破壊されていません.0で改点が破壊されたことを表しています.そして、前回の破壊点をスタックや配列でセットします.そして線分樹のメンテナンス1の最長度です.コードをよく見てください.
#include
#include
#include
#include
#include
洛谷P 894[USACO 08 FEB]ホテルHotel(最長連続区間+区間修正)
注:nがあるという意味では、nの部屋があり、番号は1-nで、最初は全部空き部屋で、m行の操作があります.以下の行はまず一つの数iを入力して、一つの操作を表します.
iが1であれば、照会部屋を表し、もう一つの数xを入力して、1-nの部屋に長さxの連続空き部屋を見つけて、連続x部屋の左端の部屋番号を出力し、この部屋番号を最小にして、長さxの連続空き部屋が見つからない場合、0を出力する.
iが2であれば、チェックアウトを表し、2つの数xを入力します.yは部屋番号x-x+y-1の部屋を空けます.
これは一番長い連続区間です.区間修正の問題は連続区間の一番左端の部屋番号を探すだけです.
#include
#include
#include
#include
#include
吉首大学2019年プログラム設計コンテスト-白山茶と紅バラ(最長連続区間+区間修正)
現在は1段のシーケンスを示していますが、0と1だけです.現在は2つの操作があります.
操作一:[l,r]を与え、この区間の最長連続0区間の長さを求める.
操作二:[l,r]を与え、この区間の0を全部1,1にして全部0にします.
現在は2本の線分樹を建立し、1つは最長連続1区間の長さを保存し、1つは最長連続0区間の長さを保存し、1つは従来の求法でいいです.2つを操作する時、対応区間の対応配列の値を全部交換します.
注意:反転2回は反転なしに等しいので、lazy配列は、初期値が0であり、1は反転することを表しています.その後、修正するたびに、lazy配列の値が異ならないか1でいいです.
#include
#include
#include
#include
#include
SPOJ-GS 1 Can 1 answer these queries I(最大サブセグメントと)
セクションのシーケンスを与えて、m回の問い合わせを行います.この区間の最大連続サブセグメントと.
一番長い連続サブシーケンスと同じです.これはテンプレートの問題です.直接コードをつけます.
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
HU 3308 LCIS(区間最長連続上昇サブシーケンス)
区間の最長連続上昇サブシーケンスを求めます.
PS:ノードの値を変更するため、dpは使用できません.ここで線分樹でメンテナンスできます.
これは裸の線分樹で、最長の上昇を求めるサブシーケンスの問題です.詳細はコードを見て、主に左子樹、右子樹、区間の最長男シーケンスの長さを更新することに注意します.
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include