問題描述
蕭芸斕是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;這道題我的思路和區間mex的思路幾乎是一樣的。對於50%的資料,n ≤ 10^5,c ≤ 10^2,m ≤ 10^5;
對於100%的資料,1 ≤ n ≤10^5,c ≤ n,m ≤ 10^5。
還是由於沒有修改操作,考慮離線演算法。區間的離線演算法套路就是對詢問區間排序。
還是可以通過暴力在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 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數...