제출 #32227

#제출 시각아이디문제언어결과실행 시간메모리
32227dqhungdlBoat (APIO16_boat)C++14
9 / 100
2000 ms48516 KiB
#include <bits/stdc++.h> using namespace std; const int mod=1e9+7; int n,MAX=0,res=0,a[505],b[505],f[505]; map<int,int> tree; void Sub1() { for(int i=1;i<=n;i++) { f[i]=1; for(int j=1;j<i;j++) if(a[j]<a[i]) f[i]=(f[i]+f[j])%mod; res=(res+f[i])%mod; } cout<<res; } void Update(int idx,int data) { while(idx<=MAX) { tree[idx]=(tree[idx]+data)%mod; idx+=idx&-idx; } } int Query(int idx) { int rs=0; while(idx>0) { rs=(rs+tree[idx])%mod; idx-=idx&-idx; } return rs; } void Sub2() { for(int i=1;i<=n;i++) for(int j=b[i];j>=a[i];j--) { int tmp=Query(j-1)+1; Update(j,tmp); res=(res+tmp)%mod; } cout<<res; } int main() { ios_base::sync_with_stdio(false); //freopen("BOAT.INP","r",stdin); cin>>n; int maxn=0; bool check=false; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]; if(a[i]!=b[i]) check=true; maxn=max(maxn,b[i]-a[i]); MAX=max(MAX,b[i]); } if(check==false) Sub1(); else if(maxn<=1e6) Sub2(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...