Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35987 | Mengmohan | 【S】T1 | C++ | 通过 | 100 | 167 MS | 6512 KB | 1222 | 2025-02-07 13:39:46 |
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; int n,Q; long long a[N],L,R; struct Ask{ int q,s,t; long long x; }b[N]; bool check1(int mid){ long long res=a[mid]; for(int i=1;i<=Q;i++){ if(b[i].q==1&&res>=b[i].x) res=b[i].t*(res+b[i].s); if(b[i].q==2&&res<=b[i].x) res=(long long)((res-b[i].s)*1.0/b[i].t); } return res>=L; } bool check2(int mid){ long long res=a[mid]; for(int i=1;i<=Q;i++){ if(b[i].q==1&&res>=b[i].x) res=b[i].t*(res+b[i].s); if(b[i].q==2&&res<=b[i].x) res=(long long)((res-b[i].s)*1.0/b[i].t); } return res<=R; } int main(){ scanf("%d%d%lld%lld",&n,&Q,&L,&R); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); sort(a+1,a+1+n); for(int i=1;i<=Q;i++) scanf("%d%lld%d%d",&b[i].q,&b[i].x,&b[i].s,&b[i].t); int l=1,r=n,ans1=0,ans2=0; while(l<=r){ int mid=(l+r)>>1; if(check1(mid)) ans1=mid,r=mid-1; else l=mid+1; } l=1,r=n; while(l<=r){ int mid=(l+r)>>1; if(check2(mid)) ans2=mid,l=mid+1; else r=mid-1; } if(!ans1||!ans2) puts("0"); else printf("%d",ans2-ans1+1); return 0; }