題意:給出乙個數列,每個詢問查詢[l,r]中至少出現兩次的數字有多少種?
思路:(1)記錄每個位置i的數字的前乙個相同數字出現的位置pre[i],沒有前乙個相同的pre[i]為0。
(2)詢問按照r公升序。
(3)開始計算:列舉i從1到m(m為詢問個數),對於某個位置x,將pre[pre[x]]+1增加1,pre[x]+1減少1,這樣做的原因在於任意乙個出現兩次的數字在任意一段區間中最多隻插入一次。然後統計左區間之前的和即可。
int s[n];
void add(int x,int t)
}int get(int x)
return ans;
}int a[n],pre[n],last[n],n;
struct node
;node b[n];
int m,ans[n],k;
int cmp(node a,node b)
int main()
for1(i,m) rd(b[i].l,b[i].r),b[i].id=i;
sort(b+1,b+m+1,cmp);
int now=0;
for1(i,m)
ans[b[i].id]=get(b[i].l);
}for1(i,m) pr(ans[i]);
}
BZOJ 2743 採花(樹狀陣列)
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...
BZOJ2743 HEOI2012 採花 題解
蕭薰兒是古國的公主,平時的一大愛好是採花。今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。花園足夠大,容納了n朵花,花有c種顏色 用整數1 c表示 且花是排成一排的,以便於公主採花。公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,她不允許最後自己採到的花中,...
樹狀陣列 luogu4113 採花
花園裡有c種花共計n朵,公主要在乙個區間 l,r 內採花,僅當該顏色的花必須至少可以採到兩朵,公主才會採它,問公主可以才多少種花。此外,題目會給出m個這樣的閉區間用來詢問。0 c顯然,這個問題和之前的luogu1972 hh的項鍊是很類似的,本質是在求區間內不同元素的數目,只是僅當該元素至少出現兩次...