提交时间:2025-02-07 15:09:44
运行 ID: 36066
#include<bits/stdc++.h> #define int long long using namespace std; int n,q,l,r; int a[200010]; int opt[200010],x[200010],s[200010],t[200010]; void readin(){ freopen("test.in","r",stdin); freopen("test.out","w",stdout); cin>>n>>q>>l>>r; for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); for(int i=1;i<=q;i++){ cin>>opt[i]>>x[i]>>s[i]>>t[i]; } } int check(int k){ int num=a[k]; for(int i=1;i<=q;i++){ if(opt[i]==1&&num>=x[i]){ num=(num+s[i])*t[i]; }else if(opt[i]==2&&num<=x[i]){ num=(num-s[i])/t[i]; } } return num; } void solve(){ int le=1,ri=n; while(le!=ri){ int mid=(le+ri+1)>>1; int ll=le,rr=ri; if(check(mid)>=l){ ri=mid; }else{ le=mid+1; } if(ll==le&&rr==ri)break; } int L; for(int i=le;i<=ri;i++){ if(check(i)>=l){ L=i; break; } } le=1,ri=n; while(le!=ri){ int mid=(le+ri+1)>>1; int ll=le,rr=ri; if(check(mid)<=r){ le=mid; }else{ ri=mid-1; } if(ll==le&&rr==ri)break; } int R; for(int i=ri;i>=le;i--){ if(check(i)<=r){ R=i; break; } } if(R-L+1>n)cout<<L<<' '<<R<<endl; else cout<<R-L+1<<endl; } signed main(){ readin(); solve(); return 0; }