離散化 線段樹(CDOJ1325卿學姐與基本法)

2021-08-04 11:14:10 字數 1434 閱讀 2583

卿學姐與基本法

「做專題也要按照基本法」

離開了詭異的村莊,卿學姐來到了威廉·聖·亂七八糟王國,這裡的國王鹹魚王是個智障。

國家渙散,盜賊四起,民不聊生。

見到這樣的景象,卿學姐不禁潸然淚下,「悠悠蒼天,奈何苦了蒼生」。

自幼學習基本法的卿學姐決定向整個國家普及基本法,改善國家法度。

在這個國家總共有n

個人,每個人都有乙個編號,編號從1開始。

由於整個國家的人實在是太多了,卿學姐每次只能對乙個連續區間的編號的人普及基本法。

同時卿學姐還想知道在某個時刻某個區間還有多少人沒有被普及基本法。

輸入

5 3

1 1 2

1 4 5

2 2 4輸出1

由於資料範圍很大,我們就可以用離散化的思想,加上線段樹,對區間進行離散,當然細節還是相當多的~

我比較菜,寫了好幾天。。

1.線段樹4倍空間沒有開。2.下標0和1的事3.初始的時候1,n,沒有加入節點4.cin和scanf的關係5.區間的交並弄錯了,一定要完全包括6.線段樹要用第1種寫法,跑的快7、注意下標的問題。

以上就是我犯得錯誤啦~

#include#define ls (rt<<1)

#define rs (rt<<1|1)

#define maxn 500000

using namespace std;

typedef pairp;//用乙個pair來存比較的方便

struct node

}sch[maxn];

int n,q,r,l,in[maxn],_sum;

p inv[maxn];

struct intervaltree

//進行初始化

void maintain(int l,int r,int rt)

maintain(l,r,rt); }

int query(int l,int r,int rt) }

};intervaltree tree;

int main()

sort(in+1,in+cnt+1);

cnt=unique(in+1,in+cnt+1)-in-1;

int tot=0;

inv[++tot]=make_pair(in[1],in[1]);

for(int i=2;i<=cnt;i++)//區間分割的大致是如果給你離散後的幾個點比如,1,5,7,20,區間就是 1,1 2,4 5,5 6,7 7,7 8,19 20,20

for(int i=1;i<=q;i++)

{ l=sch[i].l,r=sch[i].r;

if(sch[i].t==1)

tree.update(1,tot,1);

else

{ _sum=0;

tree.query(1,tot,1);

cout<

CDOJ 1292 卿學姐種花 暴力 分塊 線段樹

眾所周知,在喵哈哈村,有乙個溫柔善良的卿學姐。卿學姐喜歡和她一樣美麗的花。所以卿學姐家的後院有很多的花壇。卿學姐有 n 個花壇,一開始第 i 個花壇裡有 a i 朵花。每過一段時間,卿學姐都會在花壇裡種上新的花。作為乙個聰明的學姐,卿學姐的種花方式也是與眾不同 每一次,卿學姐會在第 x 個花壇種上 ...

離散化 線段樹

題目 分析 每次1操作會往序列底加first個second,first 和 second 都是最大1e9的資料,每次2操作詢問序列中第first到第second個數的和 一開始就感覺有點像線段樹,輸入資料太大我們可以離線處理把資料離散化下,然後扔到線段樹上,維護兩個陣列 sum 區間數的值的和 nu...

資料離散化 線段樹

前言 遇到了乙個矩形面積堆疊的問題,想了很久。終於找到了方法。先做個小記,待到具體問題時再分析。資料離散化 高大上的名字,其實就是對資料的一種處理,也可以採取陣列 或者 容器 map vector。之類的來儲存。之前的ibm技術俱樂部主席競選 那道題其實就是很好的應用。有些資料本身很大,自身無法作為...