Submission #954491

#TimeUsernameProblemLanguageResultExecution timeMemory
954491vjudge1Žarulje (COI15_zarulje)C++17
60 / 100
1022 ms7252 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int M=1e9+7,N=1<<18; int H[N],fac[N],inv[N]; int pw(int x,int k){ if(!k) return 1; int y=pw(x,k/2); y=y*y%M; if(k&1)y=y*x%M; return y; } int C(int a,int b){ return fac[a+b]*inv[b]%M*inv[a]%M; } signed main(){ cin.tie(0)->sync_with_stdio(0); fac[0]=1; for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%M; inv[N-1]=pw(fac[N-1],M-2); for(int i=N;--i;) inv[i-1]=inv[i]*i%M; int n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>H[i]; while(k--){ int x; cin>>x; stack<int>l,r; l.push(0),r.push(0); for(int i=1;i<x;l.push(H[i++])) while(l.top()>H[i]) l.pop(); for(int i=n;i>x;r.push(H[i--])) while(r.top()>H[i]) r.pop(); map<int,int> mp1,mp2; int res=1; while(l.size()) mp1[l.top()]++,l.pop(); while(r.size()) mp2[r.top()]++,r.pop(); mp1.erase(0); for(auto[i,j]:mp1) res=res*C(j,mp2[i])%M; cout<<res<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...