提交时间:2025-02-07 15:06:37

运行 ID: 36064

#include<bits/stdc++.h> #define int long long #define doub long double using namespace std; const int maxn=2e5+7; int n,q,L,R; int a[maxn]; int truncc(doub x){ return x<0?ceill(x):floorl(x); } int op[maxn],x[maxn],s[maxn],t[maxn]; int U=1e9; inline int F(int d){ for(int i=1;i<=q;i++){ if(op[i]==1){ if(d>=x[i])d=t[i]*(d+s[i]); } else{ if(d<=x[i])d=truncc(1.0L*(d-s[i])/t[i]); } // cout<<"producre"<<i<<" "<<d<<endl; } return d; } signed main(){ #ifndef ONLINE_JUDGE freopen("arithmetic.in","r",stdin); freopen("arithmetic.out","w",stdout); #endif cin>>n>>q>>L>>R; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=q;i++)cin>>op[i]>>x[i]>>s[i]>>t[i]; int l=-U,r=U; int GL,GR; while(l<r){ int mid=l+r>>1; if(L<=F(mid))r=mid; else l=mid+1; } GL=l; l=-U,r=U; while(l<r){ int mid=l+r+1>>1; if(F(mid)<=R)l=mid; else r=mid-1; } GR=l; int cnt=0; for(int i=1;i<=n;i++)if(GL<=a[i]&&a[i]<=GR)++cnt; cout<<cnt<<endl; return 0; }