P1906 線段樹 火車線路

2021-08-04 02:02:03 字數 1249 閱讀 3928

p1906【線段樹】火車線路

時間限制 : 10000 ms 空間限制 : 65536 kb

問題描述

某列火車行使在c個城市之間(出發的城市編號為1,結束達到的城市的編號為c),假設該列火車有s個座位,現在有r筆預訂票的業務。現在想對這r筆業務進行處理,看哪些預定能滿足,哪些不能滿足。

一筆預定由o、d、n三個整數組成,表示從起點站o到目標站d需要預定n個座位。一筆預定能滿足是指該筆業務在行程範圍內有能滿足的空座位,否則就不能滿足。一筆業務不能拆分,也就是起點和終點站不能更改,預定的座位數目也不能更改。所有的預定需求按給出先後順序進行處理。

請你編寫程式,看那些預定業務能滿足,那些不能滿足。

輸入格式

第一行為三個整數c、s、r,(1<=c<=60 000, 1<=s<=60 000, 1<=r<=60 000)他們之間用空隔分開。接下來的r行每行為三個整數o、d、n,(1<=o

區間修改的區間最小值。

由題意題意知,給定乙個區間每次修改乙個區間的值,若能輸出t,若不能則輸出n。稍加分析即可知,乙個區間能否被修改取決其min,所以建樹時n表示該區間最小的值,因為是區間操作用lazy標記加以維護。

因為到終點不能賴在車上,所以要左閉右開。

醜**

#include 

#include

#include

#include

#include

using

namespace

std;

#define maxn 480000

#define inf 999999999

struct node;

node tree[maxn];

int c,s,r;

void bt(int p,int x,int y)

}void pd(int k)

int query(int k,int x,int y)

void change(int k,int x,int y,int z)

int mid=(tree[k].l+tree[k].r)>>1;

if(mid>=x) change(k<<1,x,y,z);

if(mid1|1,x,y,z);

tree[k].n=min(tree[k<<1].n,tree[k<<1|1].n);

}int main()

else

cout

<<"n"

<}

}

線段樹 P4588 線段樹用法

簡單來說就是使用線段樹來儲存操作步驟,因為如果直接計算的話long long會溢位,所以建立乙個 1,q 的線段樹,使用線段樹的葉子節點來表示權值,非葉子節點表示操作過程 開始的時候線段樹的葉子節點初始化為1,而非葉子節點c k c k 1 c k 1 1 mod 也為1。當開始進行操作的時候,如果...

線段樹2 洛谷p3373 線段樹

題目位址 解釋 多了乙個乘法操作,可以考慮優先順序。每次先算乘法。首先,對於乙個區間 和為s 假設已經按 a 乘b進行了操作。值得到的值為 s a b sb ab 假設先乘得到 sb a 這樣相比,add應該還要再乘上乙個b才對,所以,當更新到乙個區間時,為了進行先乘的操作而不讓結果發生變化,應該將...

P3373 線段樹模板

如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包...