Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35987 Mengmohan 【S】T1 C++ 通过 100 167 MS 6512 KB 1222 2025-02-07 13:39:46

Tests(10/10):


#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; }


测评信息: