# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
285008 | arnold518 | Žarulje (COI15_zarulje) | C++14 | 206 ms | 47208 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 4e5;
const int MOD = 1e9+7;
int N, A[MAXN+10], Q;
ll ans[MAXN+10];
ll mypow(ll x, ll y)
{
if(y==0) return 1;
if(y%2) return mypow(x, y-1)*x%MOD;
ll t=mypow(x, y/2);
return t*t%MOD;
}
ll fac[MAXN+10], ifac[MAXN+10];
ll invf(ll x, ll y)
{
return ifac[x+y]*fac[x]%MOD*fac[y]%MOD;
}
ll f(ll x, ll y)
{
return fac[x+y]*ifac[x]%MOD*ifac[y]%MOD;
}
vector<pii> V1[MAXN+10], V2[MAXN+10];
int P1[MAXN+10], P2[MAXN+10];
int main()
{
scanf("%d%d", &N, &Q);
for(int i=1; i<=N; i++) scanf("%d", &A[i]);
fac[0]=1;
for(int i=1; i<=MAXN; i++) fac[i]=fac[i-1]*i%MOD;
ifac[MAXN]=mypow(fac[MAXN], MOD-2);
for(int i=MAXN; i>=1; i--) ifac[i-1]=ifac[i]*i%MOD;
{
vector<int> S;
for(int i=1; i<=N; i++)
{
while(!S.empty() && S.back()>A[i])
{
V1[i].push_back({S.back(), -1});
S.pop_back();
}
V1[i].push_back({A[i], 1});
S.push_back(A[i]);
}
}
{
vector<int> S;
for(int i=N; i>=1; i--)
{
while(!S.empty() && S.back()>A[i])
{
V2[i].push_back({S.back(), 1});
S.pop_back();
}
V2[i].push_back({A[i], -1});
S.push_back(A[i]);
}
for(auto it : S) P2[it]++;
}
ll val=1;
for(int i=1; i<=N; i++)
{
for(auto it : V1[i-1])
{
val=val*invf(P1[it.first], P2[it.first])%MOD;
P1[it.first]+=it.second;
val=val*f(P1[it.first], P2[it.first])%MOD;
}
for(auto it : V2[i])
{
val=val*invf(P1[it.first], P2[it.first])%MOD;
P2[it.first]+=it.second;
val=val*f(P1[it.first], P2[it.first])%MOD;
}
ans[i]=val;
}
while(Q--)
{
int p;
scanf("%d", &p);
printf("%lld\n", ans[p]);
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |