蕭薰兒是古國的公主,平時的一大愛好是採花。聽說又是一道套路題……?還是hh的項鍊變形版?emm那不是個分塊/莫隊嗎,這題資料範圍這麼大怎麼做a……今天天氣晴朗,陽光明媚,公主清晨便去了皇宮中新建的花園採花。
花園足夠大,容納了n朵花,花有c種顏色(用整數1-c表示),且花是排成一排的,以便於公主採花。公主每次採花後會統計採到的花的顏色數,顏色數越多她會越高興!同時,她有一癖好,她不允許最後自己採到的花中,某一顏色的花只有一朵。為此,公主每採一朵花,要麼此前已採到此顏色的花,要麼有相當正確的直覺告訴她,她必能再次採到此顏色的花。
由於時間關係,公主只能走過花園連續的一段進行採花,便讓女僕福涵潔安排行程。福涵潔綜合各種因素擬定了m個行程,然後一一向你詢問公主能採到多少朵花(她知道你是程式設計高手,定能快速給出答案!),最後會選擇令公主最高興的行程(為了拿到更多獎金!)。
以及這題被某大佬標為0分sb題emmm……感覺到了深深的差距。
參考:如果我們知道hh的項鍊如何用樹狀陣列來做的話這題就異常簡單了。
我們將詢問離線,然後從左往右掃,保證每種顏色出現第二次的位置標上1,這樣我們詢問$[l,r]$就相當於直接樹狀陣列區間查詢$[1,r]$的1的個數就行了。
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=2e6+5
;inline
intread()
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return w?-x:x;
}struct
datad[n];
intn,m,c,b[n],tr[n],ans[n],lst[n],nxt[n];
bool
vis[n];
inline
bool
cmp(data a,data b)
inline
int lowbit(int t)
inline
void add(int x,int
y)inline
int qry(int
x)int
main()
nxt[
0]=0
;
for(int i=1;i<=m;i++)
sort(d+1,d+m+1
,cmp);
for(int i=1,j=1;i<=n;i++)
}for(int i=1;i<=m;i++)printf("
%d\n
",ans[i]);
return0;
}
+
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...
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 ...
bzoj4032 HEOI2015 最短不公共子串
字尾自動機 序列自動機 序列自動機這東西好像很高階的樣子。其實很簡單的啦。詳細可以看一下我的部落格序列自動機 對字串a構建字尾自動機 str a 和序列自動機 seq a 類似地,對字串b也構建字尾自動機 str b 和序列自動機 seq b 然後對於4個詢問我們分別拿出1個自動機,如第乙個詢問拿出...