傳送門
比賽卡題掛機先溜了
離散化一下,讓後記錄乙個cnt陣列代表這個數出現次數,num陣列記錄出現次數為i的數有幾個。讓後直接維護就好了
#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
#define l (u<<1)
#define r (u<<1|1)
#define mid (tr[u].l+tr[u].r>>1)
#define len(u) (tr[u].r-tr[u].l+1)
#define pb push_back
#define mk make_pair
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n=
1000010
,mod=
1e9+
7,inf=
0x3f3f3f3f
;const
double eps=
1e-6
;int n,m;
int cnt[n]
,a[n]
,id[n]
,num[n]
,ans[n]
;int now;
struct node
q[n]
;vector<
int>v;
intfind
(int x)
bool
cmp(node a,node b)
void
del(
int x)
void
add(
int x)
intmain()
for(
int i=
1;i<=se;i++
)for
(int j=
(i-1
)*se+
1;j<=i*se;j++
) id[j]
=i;sort
(v.begin()
,v.end()
);v.
erase
(unique
(v.begin()
,v.end()
),v.
end())
;for
(int i=
1;i<=n;i++
) a[i]
=find
(a[i]);
for(
int i=
1;i<=m;i++
)sort
(q+1
,q+1
+m,cmp)
;int l=
1,r=0;
for(
int i=
1;i<=m;i++
)for
(int i=
1;i<=m;i++
)printf
("%d\n"
,-ans[i]);
return0;
}/**/
P3709 大爺的字串題 腦子 莫隊
簡化題意 區間眾數出現次數?為什麼?原因是,貪心的想,我們要劃分成盡量少的嚴格遞增序列,這樣rp掉的最少。設區間眾數出現次數為 x 那我們至少要分成 x 段嚴格上公升序列。include include include include include define r register int us...
P3709 大爺的字串題 莫隊 結論
p3709 大爺的字串題 有乙個顯然的結論 一段區間裡最小答案為眾數的個數 用莫隊來離線求眾數 tmp i 表示出現 i 次的數的個數,num i 表示 i 出現的次數 縮小區間 答案可能減小,看答案所在的 tmp 是否不唯一 擴大區間 答案增大 includetypedef int ll cons...
莫隊 洛谷 P3709 大爺的字串題
給你乙個字串a,每次詢問一段區間的貢獻 貢獻定義 每次從這個區間中隨機拿出乙個字元x,然後把x從這個區間中刪除,你要維護乙個集合s 如果s為空,你rp減1 如果s中有乙個元素不小於x,則你rp減1,清空s 之後將x插入s 由於你是大爺,平時做過的題考試都會考到,所以每次詢問你搞完這段區間的字元之後最...