Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36073 daimo 【S】T1 C++ 通过 100 292 MS 8056 KB 1398 2025-02-07 15:11:23

Tests(10/10):


#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(){ 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=n+1; 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=n; for(int i=ri;i>=le;i--){ if(check(i)<=r){ R=i; break; } } cout<<R-L+1<<endl; } signed main(){ readin(); solve(); return 0; }


测评信息: