Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
44513 | xujindong | 数列操作1 | C++ | 通过 | 100 | 297 MS | 2048 KB | 1529 | 2022-02-09 09:35:08 |
#include <bits/stdc++.h> using namespace std; int a[50005],tag[50005],bls[50005]; vector<int>v[50005]; int n,bl; inline int in(int ans=0,int f=0) { char c=getchar(); for(; c<'0' || c>'9'; f^=(c=='-'),c=getchar()); for(; c<='9' && c>='0'; c=getchar())ans=(ans<<3)+(ans<<1)+(c^48); return f?-ans:ans; } void reset(int pos) { v[pos].clear(); for (int i=(pos-1)*bl+1; i<=min(pos*bl, n); i++)v[pos].push_back(a[i]); sort(v[pos].begin(), v[pos].end()); } void change(int l, int r, int c) { for (int i=l; i<=min(r, bls[l]*bl); i++)a[i]+=c; reset(bls[l]); if (bls[l]^bls[r]) { for (int i=(bls[r]-1)*bl+1; i<=r; i++)a[i]+=c; reset(bls[r]); } for (int i=bls[l]+1; i<=bls[r]-1; i++)tag[i]+=c; } int count(int l, int r, int c) { int cnt=0; for (int i=l; i<=min(r, bls[l]*bl); i++)if (a[i]+tag[bls[i]]<c)cnt++; if (bls[l]^bls[r])for(int i=max((bls[r]-1)*bl+1, l); i<=r; i++)if(a[i]+tag[bls[i]]<c)cnt++; for (int i=bls[l]+1; i<=bls[r]-1; i++)cnt+=lower_bound(v[i].begin(),v[i].end(),c-tag[i])-v[i].begin(); return cnt; } int main() { n=in(),bl=sqrt(n); for (int i=1; i<=n; i++)a[i]=in(); for (int i=1,k=1,b=0; i<=n; i++) { if(b==bl)k++,b=0; bls[i]=k; v[bls[i]].push_back(a[i]); b++; } for (int i=1; i<=bls[n]; i++)sort(v[i].begin(),v[i].end()); for (int i=1,op, l, r, c; i<=n; i++) { op=in(),l=in(),r=in(),c=in(); if (op==0)change(l,r,c); else printf("%d\n",count(l,r,c*c)); } return 0; }