Submission #1439774
Source Code Expand
#include<ctime> #include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<cassert> #include<string> #include<sstream> #include<fstream> #include<deque> #include<queue> #include<vector> #include<map> #include<list> #include<stack> #include<set> #include<bitset> #include<iomanip> #include<utility> #include<functional> #include<cctype> #include<cerrno> #include<cfloat> #include<ciso646> #include<climits> #include<clocale> #include<complex> #include<csetjmp> #include<csignal> #include<cstdarg> #include<cstddef> #include<cwchar> #include<cwctype> #include<exception> #include<locale> #include<numeric> #include<new> #include<stdexcept> #include<limits> using namespace std; #define ll long long #define INF 1e9 #define rep(i,n) for(int (i)=0;(i)<n;i++) #define REP(i,n) for(int (i)=1;(i)<=n;i++) #define mk(a,b) make_pair(a,b) #define fi first #define se second #define pii pair<int,int> #define sz(s) s.size() #define all(s) (s.begin(),s.end()) const int maxn=100005; const int mod=1e9+7; int n,A[2]; int s[maxn]; int tree[maxn*4][2],tag[maxn*4][2]; int next[maxn][2]; void Push(int node,int set){ if(tag[node][set]){ tree[node][set]=(tree[node][set]+tag[node][set])%mod; tag[node*2][set]=(tag[node*2][set]+tag[node][set])%mod; tag[node*2+1][set]=(tag[node*2+1][set]+tag[node][set])%mod; tag[node][set]=0; } } void Pull(int node,int set){ tree[node][set]=(tree[node][set]+tree[node*2][set])%mod; tree[node][set]=(tree[node][set]+tree[node*2+1][set])%mod; } void update(int l,int r,int vl,int vr,int node,int val,int set){ if(vl>vr)return; if(l>vr||r<vl)return; if(l>=vl&&r<=vr){ tag[node][set]=(tag[node][set]+val)%mod; Push(node,set); return; } Push(node,set); int mid=(l+r)>>1; update(l,mid,vl,vr,node*2,val,set); update(mid+1,r,vl,vr,node*2+1,val,set); Pull(node,set); } int query(int l,int r,int vl,int vr,int node,int set){ if(l>vr||r<vl)return 0; if(l>=vl&&r<=vr)return (tree[node][set]+tag[node][set])%mod; Push(node,set); int mid=(l+r)>>1; return (query(l,mid,vl,vr,node*2,set)+query(mid+1,r,vl,vr,node*2+1,set))%mod; } int main(){ ios::sync_with_stdio(false); cin>>n>>A[0]>>A[1]; rep(i,n)cin>>s[i]; next[n-1][0]=next[n-1][1]=n-1; for(int i=n-2;i>=0;i--){ rep(j,2){ if(s[i+1]-s[i]>=A[j])next[i][j]=next[i+1][j]; else next[i][j]=i; } } rep(i,2)update(0,n-1,0,0,1,1,i); rep(i,n){ rep(j,2){ int cur=query(0,n-1,i,i,1,j); int low=lower_bound(s,s+n,s[i]+A[j])-s; int high=next[i+1][j^1]; // cout<<i<<" "<<j<<" "<<cur<<endl; update(0,n-1,max(low-1,i+1),high,1,cur,j^1); // cout<<"update:"<<(j^1)<<" "<<max(low-1,i+1)<<" "<<high<<endl; // update(0,n-1,max(low,i+2),min(high+1,n-1),1,cur,j); // cout<<"update:"<<j<<" "<<max(low,i+2)<<" "<<min(high+1,n-1)<<endl; } } cout<<(query(0,n-1,n-1,n-1,1,0)+query(0,n-1,n-1,n-1,1,1))%mod; return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - Division into Two |
User | little_waxberry |
Language | C++14 (GCC 5.4.1) |
Score | 0 |
Code Size | 3012 Byte |
Status | CE |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:103:2: error: reference to ‘next’ is ambiguous next[n-1][0]=next[n-1][1]=n-1; ^ ./Main.cpp:60:5: note: candidates are: int next [100005][2] int next[maxn][2]; ^ In file included from /usr/include/c++/5/bits/stl_algobase.h:66:0, from /usr/include/c++/5/bits/char_traits.h:39, from /usr/include/c++/5/ios:40, from /usr/include/c++/5/ostream:38, from /usr/include/c++/5/iostream:39, from ./Main.cpp:2: /usr/include/c++/5/bits/stl_iterator_base_funcs.h:184:5: note: template<class _ForwardIterator> _ForwardIterator std::next(_ForwardIterator, typename std::iterator_traits<_Iter>::difference_type) next(_ForwardIterator __x, typename ^ ./Main.cpp:103:15: error: reference to ‘next’ is ambiguous next[n-1][0]=next[n-1][1]=n-1; ^ ./Main.cpp:60:5: note: candidates are: int next [100005][2] int next[maxn][2]; ^ In file included from...