題意簡述:給定乙個長度為 \(n\) 的序列,每次給定乙個區間 \([l,r]\),求 \((r-l+1)!/(count(1)!\times count(2)!\times ...\times count(n)!)\)
先預處理出階乘和階乘的乘法逆元,然後每次更新除掉原來的數乘上後來的數就好了
\(code\ below:\)
#include #include #include #include #include #define ll long long
using namespace std;
const int maxn=30000+10;
const int p=1e9+7;
int n,m,a[maxn],cnt[maxn],ans[maxn],farc[maxn],inv[maxn],blo,now;
struct queryq[maxn];
bool cmp(query a,query b)
inline void add(int x)
inline void del(int x)
int main()
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
} return 0;
}
類似乙個不簡單的詢問的處理方式
\(code\ below:\)
#include #include #include #include #include #include #define ll long long
using namespace std;
const int maxn=100000+10;
int n,m,k,a[maxn],b[maxn<<1],c[maxn<<1],tot,blo;ll ans[maxn],now;
struct queryq[maxn<<2];
bool cmp(query a,query b)
sort(q+1,q+tot+1,cmp);
int l=0,r=0;
for(int i=1;i<=tot;i++)
for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);
} return 0;
}
莫隊學習筆記
text text 借用的內容 一般的區間問題都可以使用莫隊。這是離線莫隊的裸的板子 真的就這麼短的四句話只是add和del裡面要加內容。至於塊的大小在這兒 對於複雜度的分析 text sum x i sqrt n sqrt o n sqrt text 由此可以推出 莫隊的複雜度大概就是乙個 the...
莫隊學習筆記
zl 姐姐有一串數,由於學生化太頭禿了,所以現在他想問你 m m 1e5 次,其中 l 到 r 區間出現次數在 3 次及以上的數有多少個?線段樹效率低下,不好維護。p.s.lmpp 巨佬說如果 3 次可以取等的話,線段樹反而效率更高,巨佬們可以自己嘗試,菜比這裡就不演示了 故引入莫隊 一種處理區間問...
學習筆記 樹上莫隊
其實樹上莫隊是乙個尤拉序而已嘛,像普通的莫隊,特判一下出現過兩次的值就行了 設 st i 為 i 進棧的時間,ed i 為 i 出棧的時間,dfn x,那麼就可以分兩種情況 1 y 在 x 子樹中,也就是 lca x,y x 那麼區間轉化成 st x,st y 2 y 不在 x 子樹中,也就是 lc...