Submission #61222

#TimeUsernameProblemLanguageResultExecution timeMemory
61222istleminBoat (APIO16_boat)C++14
31 / 100
1947 ms125100 KiB
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i = a; i<int(b);++i) #define all(v) v.begin(),v.end() #define sz(v) v.size() #define trav(a,c) for(auto a: c) typedef long long ll; typedef vector<ll> vi; typedef pair<ll,ll> pii; ll mod = 1e9+7; class Node { public: ll val = 0; ll dn,up; Node *left; Node *right; bool children = false; Node(ll _dn, ll _up){ dn = _dn; up = _up; } void ensure(){ if(dn+1==up) return; if(!children){ children = true; left = new Node(dn,(dn+up)/2); right = new Node((dn+up)/2,up); } } ll update(ll pos, ll v){ if(pos<dn||pos>=up) return val; if(dn+1==up) return val = (val+v)%mod; ensure(); ll l = left->update(pos,v); ll r = right->update(pos,v); return val = (l+r)%mod; } ll query(ll a, ll b){ if(b<=dn||a>=up) return 0; if(a<=dn&&b>=up) return val; ensure(); return (left->query(a,b)+right->query(a,b))%mod; } }; int main(){ cin.sync_with_stdio(false); ll n; cin>>n; vi a,b; a.resize(n); b.resize(n); //posLastStart.resize(n); //posLast.push_back(-1); rep(i,0,n) { cin>>a[i]>>b[i]; //posLastStart[i] = posLast.size(); //rep(j,a[i],b[i]+1) posLast.push_back(j); } //mem.resize(posLastStart.size()+1,vi(n+1,-1)); //cout<<(getNum(0,0)+mod-1)%mod<<endl; Node dp(0,1e10); dp.update(0,1); ll ans = 0; rep(i,0,n){ vi u(b[i]+1-a[i]); rep(j,a[i],b[i]+1) { ans = (ans + (u[j-a[i]] = dp.query(0,j)))%mod; } rep(j,a[i],b[i]+1) { dp.update(j,u[j-a[i]]); } } cout<<ans<<endl; _Exit(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...