#includeusing namespace std;const int maxn = 1e6+7;
int c[maxn],a[maxn],p[maxn],next[maxn];
int lowbit(int x)
void update(int i,int d)
}int query(int i)
return ans;
}struct node
que[maxn];
bool cmp1(node a,node b)
{ if(a.l==b.l)
return a.r=1;i--)
next[i]=p[a[i]],p[a[i]]=i;
for(int i = 1;i<=max;i++)
if(next[p[i]])
update(next[p[i]],1);
for(int i = 1;i<=m;i++)
scanf("%d%d",&que[i].l,&que[i].r),que[i].id=i;
sort(que+1,que+1+m,cmp1);
int l = 1;
for(int i = 1;i<=m;i++)
{ while(l
description
蕭芸斕是
z國的公主,平時的一大愛好是採花。
今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。花園足夠大,容納了n
朵花,花有
c種顏色(用整數
1-c表示),且花是排成一排的,以便於公主採花。
公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,
她不允許最後自己採到的花中,某一顏色的花只有一朵。為此,公主每採一朵花,要麼此前
已採到此顏色的花,要麼有相當正確的直覺告訴她,她必能再次採到此顏色的花。
由於時間關係,公主只能走過花園連續的一段進行採花,便讓女僕福涵潔安排行程。福
涵潔綜合各種因素擬定了
m個行程,然後一一向你詢問公主能採到多少朵花(她知道你是編
程高手,定能快速給出答案!),最後會選擇令公主最高興的行程(為了拿到更多獎金!)。
input
第一行四個空格隔開的整數n、
c以及m。
接下來一行
n個空格隔開的整數,每個數在
[1, c]
間,第i
個數表示第
i朵花的顏色。
接下來m
行每行兩個空格隔開的整數l和
r(l ≤
r),表示女僕安排的行程為公主經過第l
到第r朵花進行採花。
output共m
行,每行乙個整數,第
i個數表示公主在女僕的第
i個行程中能採到的花的顏色數。
sample input
5 3 5
1 2 2 3 1
1 51 2
2 22 3
3 5
sample output
20 0 1 0
【樣例說明】
詢問[1, 5]:公主採顏色為1和2的花,由於顏色3的花只有一朵,公主不採;詢問[1, 2]:顏色1和顏色2的花均只有一朵,公主不採;
詢問[2, 2]:顏色2的花只有一朵,公主不採;
詢問[2, 3]:由於顏色2的花有兩朵,公主採顏色2的花;
詢問[3, 5]:顏色1、2、3的花各一朵,公主不採。
hint
【資料範圍】
對於100%的資料,1 ≤ n ≤ 10^6,c ≤ n,m ≤10^6。
BZOJ 2743 採花(樹狀陣列)
題意 給出乙個數列,每個詢問查詢 l,r 中至少出現兩次的數字有多少種?思路 1 記錄每個位置i的數字的前乙個相同數字出現的位置pre i 沒有前乙個相同的pre i 為0。2 詢問按照r公升序。3 開始計算 列舉i從1到m m為詢問個數 對於某個位置x,將pre pre x 1增加1,pre x ...
BZOJ2743 HEOI2012 採花 題解
蕭薰兒是古國的公主,平時的一大愛好是採花。今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。花園足夠大,容納了n朵花,花有c種顏色 用整數1 c表示 且花是排成一排的,以便於公主採花。公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,她不允許最後自己採到的花中,...
樹狀陣列 luogu4113 採花
花園裡有c種花共計n朵,公主要在乙個區間 l,r 內採花,僅當該顏色的花必須至少可以採到兩朵,公主才會採它,問公主可以才多少種花。此外,題目會給出m個這樣的閉區間用來詢問。0 c顯然,這個問題和之前的luogu1972 hh的項鍊是很類似的,本質是在求區間內不同元素的數目,只是僅當該元素至少出現兩次...