Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll int64_t
- #define rep(i,a,b); for (ll i=a; i<=b; i++)
- #define ii pair<ll,ll>
- #define vll vector<ll>
- #define vii vector<ii>
- #define a first
- #define b second
- int main()
- {
- ll n;
- cin>>n;
- ll a[n+10],SoCach[n+10],ans=0,length[n+10],lengthMax=0;
- vll b1[n+10],b(n+10,1e11);
- //b1 luu vi tri cac ptu co legth = nhau
- rep(i,0,n) b1[i].clear();//clean cho sạch tý ? t đập hen
- b[0]=-1e11;// quốc dân hen
- rep(i,1,n){
- cin>>a[i];
- ll k=lower_bound(b.begin(),b.end(),a[i])-b.begin();//quốc dân nữa nè hen
- b[k]=a[i];//như trên hen
- SoCach[i]=0;//làm sạch xíu cộng hen
- if (b1[k-1].empty()) SoCach[i]=1;//đừng hỏi t hen
- else
- for (ll j:b1[k-1]) if (a[i]>a[j]) SoCach[i]=(SoCach[i]+SoCach[j])%1000000007;//tính nè hen
- b1[k].push_back(i);//lưu vị trí hen
- length[i]=k;//lưu độ dài hen
- //
- lengthMax=max(lengthMax,k);
- }
- rep(i,1,n) if (lengthMax==length[i]) ans=(ans+SoCach[i])%1000000007;
- cout<<ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement