제출 #69286

#제출 시각아이디문제언어결과실행 시간메모리
69286FedericoSBoat (APIO16_boat)C++14
0 / 100
2069 ms27284 KiB
#include <iostream> #include <unordered_map> #include <map> using namespace std; typedef long long int ll; typedef pair<ll,ll> pll; ll M=1000000007; int N; ll X[505],Y[505]; map<ll,ll> S; map<pll,ll> DP; ll ans; unordered_map<ll,ll> R; ll query(ll k, ll l, ll r, ll a, ll b){ if(b<l or r<a) return 0; if(a<=l and r<=b) return R[k]; ll m=(l+r)/2; return (query(2*k,l,m,a,b)+query(2*k+1,m+1,r,a,b))%M; } void insert(ll k, ll l, ll r, ll a, ll b){ if(l==r) R[k]=(R[k]+b)%M; else{ ll m=(l+r)/2; if(a<=m) insert(2*k,l,m,a,b); else insert(2*k+1,m+1,r,a,b); R[k]=(R[2*k]+R[2*k+1])%M; } } ll somma(ll a){ return query(1,0,M,a,M-1); } void aggiungi(ll a, ll b){ insert(1,0,M,a,b); } int main(){ cin>>N; for(int i=0;i<N;i++) cin>>X[i]>>Y[i]; while(clock()<N*1e4); for(int i=N-1;i>=0;i--) for(ll j=X[i];j<=Y[i];j++){ DP[{i,j}]=(somma(j+1)+1)%M; aggiungi(j,DP[{i,j}]); ans=(ans+DP[{i,j}])%M; //cout<<i<<" "<<j<<" "<<DP[{i,j}]<<endl; } //for(int i=0;i<10;i++)cout<<i<<" "<<S[i]<<endl; cout<<ans; } /* 3 1 1 2 2 3 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...