题目大意:
给定一个长度为$n(1\leq n\leq10^5)$的正整数序列$s(1\leq s_i\leq n)$,对于$m(1\leq m\leq10^)$次询问$l,r$,每次求区间$[s_l,\ldots,s_r]$中,众数出现的次数以及众数的个数。思路:
莫队。 对于询问$l,r$,维护每个数$s_i$出现的次数$cnt1[i]$以及每个$cnt1[i]$出现的次数$cnt2[i]$。1 #include2 #include 3 #include 4 #include 5 inline int getint() { 6 register char ch; 7 while(!isdigit(ch=getchar())); 8 register int x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');10 return x;11 }12 const int N=100001,M=1000000;13 int a[N],belong[M],cnt1[N],cnt2[N],tmp,ans1[M],ans2[M];14 struct Query {15 int l,r,id;16 bool operator < (const Query &another) const {17 if(belong[l]==belong[another.l]) return belong[r] q[i].l) ins(--l);46 while(r q[i].r) del(r--);48 ans1[q[i].id]=tmp;49 ans2[q[i].id]=cnt2[tmp];50 }51 for(register int i=0;i