提交时间:2025-02-07 14:09:02
运行 ID: 36014
#include<bits/stdc++.h> #define int long long using namespace std; int a[200010],b[200010]; struct node{ int op,x,s,t; }ask[200010]; int n,q,l,r; int limit; int tr(double x){return (int)x;} int judge(int now) { if(b[now]) return a[now]; for(int i=1;i<=q;i++) { int op=ask[i].op,x=ask[i].x,s=ask[i].s,t=ask[i].t; if(op==1&&a[now]>=x) a[now]=t*(a[now]+s); else if(op==2&&a[now]<=x) a[now]=(a[now]-s)/t; } b[now]=1; return a[now]; } int solve(int x) { int l=1,r=n,ans; while(l<=r) { int mid=(l+r)/2; if(judge(mid)<=x) l=mid+1,ans=mid; else r=mid-1; } return ans; } signed main() { cin>>n>>q>>l>>r; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(int i=1;i<=q;i++) cin>>ask[i].op>>ask[i].x>>ask[i].s>>ask[i].t; cout<<solve(r)-solve(l-1); }