河北OI 2012 DAY1 採花 線段樹

2021-08-09 08:26:43 字數 2631 閱讀 3421

問題描述

蕭芸斕是z 國的公主,平時的一大愛好是採花。

今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。花園足夠大,容納

了n 朵花,花有c 種顏色(用整數1-c 表示),且花是排成一排的,以便於公主採花。

公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,

她不允許最後自己採到的花中,某一顏色的花只有一朵。為此,公主每採一朵花,要麼此前

已採到此顏色的花,要麼有相當正確的直覺告訴她,她必能再次採到此顏色的花。

由於時間關係,公主只能走過花園連續的一段進行採花,便讓女僕福涵潔安排行程。福

涵潔綜合各種因素擬定了m 個行程,然後一一向你詢問公主能採到多少朵花(她知道你是編

程高手,定能快速給出答案!),最後會選擇令公主最高興的行程(為了拿到更多獎金!)。

輸入格式

第一行四個空格隔開的整數n、c 以及m。

接下來一行n 個空格隔開的整數,每個數在[1, c]間,第i 個數表示第i 朵花的顏色。

接下來m 行每行兩個空格隔開的整數l 和r(l ≤ r),表示女僕安排的行程為公主經

過第l 到第r 朵花進行採花。

輸出格式

共m 行,每行乙個整數,第i 個數表示公主在女僕的第i 個行程中能採到的花的顏色數。

樣例輸入

5 3 5

1 2 2 3 1

1 5

1 2

2 2

2 3

3 5

樣例輸出

2

0 0 1 0

樣例說明

詢問[1, 5]:公主採顏色為1 和2 的花,由於顏色3 的花只有一朵,公主不採;

詢問[1, 2]:顏色1 和顏色2 的花均只有一朵,公主不採;

詢問[2, 2]:顏色2 的花只有一朵,公主不採;

詢問[2, 3]:由於顏色2 的花有兩朵,公主採顏色2 的花;

詢問[3, 5]:顏色1、2、3 的花各一朵,公主不採。

資料範圍

對於20%的資料,n ≤ 10^2,c ≤ 10^2,m ≤ 10^2;

對於50%的資料,n ≤ 10^5,c ≤ 10^2,m ≤ 10^5;

對於100%的資料,1 ≤ n ≤10^5,c ≤ n,m ≤ 10^5。

這道題我的思路和區間mex的思路幾乎是一樣的。

還是由於沒有修改操作,考慮離線演算法。區間的離線演算法套路就是對詢問區間排序。

還是可以通過暴力在o(

n)內求出以1為左端點的區間可以採到有多少朵花。現在考慮如何把左端點右移,也就是考慮左端點右移後會造成什麼影響。設原來的左端點的花顏色為c,當且僅當右移後的區間中,原來恰好有兩朵顏色為c的花,現在只有一朵花的時候,答案才會減去1。換句話說,如果與i號位置顏色相同的下一朵花的位置為ne

x[i]

,那麼只有區間[n

ex[i

],ne

x[ne

x[i]

]−1]

會受到影響。區間修改用線段樹是優秀的。

**:

#include

#include

#define maxn 100005

#define maxt 400005

using

namespace

std;

int n,c,m,col[maxn],nex[maxn],las[maxn],tmp[maxn],cnt[maxn],ans[maxn];

struct nodeqry[maxn];

bool

operator

<(node x,node y)

int mid=x+y>>1;

ls[p]=build(x,mid);

rs[p]=build(mid+1,y);

return p;

}void putdown(int p)

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

int mid=a[p]+b[p]>>1;

if(x<=mid)modify(ls[p],x,y);

if(midint getans(int p,int k)

int main()

nex[n+1]=n+1;

for(i=1;i<=n;i++)

build(1,n);

sort(qry+1,qry+m+1);

for(i=1;i<=n;i++)

modify(1,nex[i],nex[nex[i]]-1);

}for(i=1;i<=m;i++)printf("%d\n",ans[i]);

}

分治 ZJOI2012day1 數列 題解

乙個數列,其中a 0 0,a 1 1,a 2 i a i a 2 i 1 a i a i 1 給出t個n,求a n 然後我們需要推出通用的處理方法來利用p和q,不難想到x要分奇偶討論 1.x為奇數 我們假設已經求好了下面的p和q,現在要把p和q對應到x 1和x上來,不難發現p不變,而q p q。2....

口胡 NOIP2012DAY1 借教室

題目描述 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教室的資訊,我們自然希望程式設計解決這個問題。我們需要處理接下來n天的借教室資訊,其中第i天學校有ri個教室可供租借。共有...

NOIP2012 DAY1 T2 國王遊戲

恰逢 h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數...