题解:
这种题显然对出现次数分类讨论一下。
出现少的 O ( S 2 ) O(S^2) O(S2)做,出现多的 O ( n ) O(n) O(n)做,最后可以做到 O ( n n log n ) O(n \sqrt{n \log n}) O(nnlogn)的复杂度。
#include <bits/stdc++.h>
using namespace std;
typedef pair <int,int> pii;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {
if(ch=='-')f=-1; ch=nc();}
while(isdigit(ch)) {
i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=1e5+50, L=1e5