Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
44480 | wsad | 数列操作1 | C++ | 解答错误 | 30 | 1053 MS | 1428 KB | 1331 | 2022-02-08 23:21:57 |
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll l,r,c,opt,Sq,cnt; ll a[50010],A[50010],M[50010],Lazy[50010]; ll Sort(ll L,ll R,ll X){ int k=L,Mid; while(L<R) { Mid=(L+R)/2; if(a[Mid]>=X) R=Mid-1; if(a[Mid]<X) L=Mid; } return Mid-k+1; } void Add(){ int i; for(i=l;i<=min(r,M[l]*Sq);++i) a[i]+=c; copy(a+(M[l]-1)*Sq+2,a+M[l]*Sq+1,A+(M[l]-1)*Sq+1); sort(A+(M[l]-1)*Sq+2,A+M[l]*Sq+1); for(;i<=M[r]-1;i+=Sq) Lazy[i]+=c; for(;i<=r;++i) a[i]+=c; copy(a+(M[r]-1)*Sq+2,a+M[r]*Sq+1,A+(M[r]-1)*Sq+1); sort(A+(M[r]-1)*Sq+2,A+M[r]*Sq+1); return ; } void Find() { int i; cnt=0; for(i=l;i<=min(r,M[l]*Sq+1);++i) if(a[i]<c) ++cnt; for(;i<=M[r]-1;i+=Sq) { cnt+=Sort((i-1)*Sq+1,i*Sq,c-Lazy[i]); } for(;i<=r;++i) if(a[i]<c) ++cnt; } int main(){ // freopen("array1.in","r",stdin); // freopen("array1.out","w",stdout); int n; cin>>n; Sq=sqrt(n); for(int i=1;i<=n;++i) { cin>>a[i]; A[i]=a[i]; M[i]=(i-1)/Sq+1; } int x= n/Sq; if ( n%Sq) x++; for(int i=1;i<=x;++i) sort( A+(i-1)*Sq+1, A+i*Sq+1 ); for(int i=1;i<=n;++i) { cin>>opt>>l>>r>>c; if(opt==0) { Add(); } if(opt==1) { c=c*c; Find(); cout<<cnt<<'\n'; } } return 0; }