Terraria @ 2022-02-28 07:43:39
先上代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,size,cnt;//size表示完整的块的大小,cnt表示总共cnt个块
int a[1000009],b[1000009];
int in[1000009];//属于哪个块
int L[1000009],R[1000009];//每个块的左右端点
int add[1000009];
inline int read(){//快读
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
inline void write(int x){//快写
if(x<0) x=~x+1,putchar('-');
if(x>9) write(x/10);
putchar(x%10+'0');
}
void init(){
size=sqrt(n);
cnt=n/size;
if(n%size) cnt++;
for(int i=1;i<=cnt;i++){
L[i]=(i-1)*size+1;
R[i]=i*size;
}
R[cnt]=n;
for(int i=1;i<=n;i++){
//in[i]=(i-1)/size+1;
b[i]=a[i];
}
for(int i=1;i<=cnt;i++) sort(b+L[i],b+R[i]+1);
}
void update(int l,int r,int k){
int p=in[l],q=in[r];
if(p==q){
for(int i=l;i<=r;i++) a[i]+=k;
for(int i=L[p];i<=R[q];i++) b[i]=a[i];
sort(b+L[p],b+R[p]+1);
return;
}
//处理左边的零散块
for(int i=l;i<=R[p];i++) a[i]+=k;
for(int i=L[p];i<=R[p];i++) b[i]=a[i];
sort(b+L[p],b+R[p]+1);
//处理右边的零散块
for(int i=L[q];i<=r;i++) a[i]+=k;
for(int i=L[q];i<=R[q];i++) b[i]=a[i];
sort(b+L[q],b+R[q]+1);
//处理中间完整的块
for(int i=p+1;i<=q-1;i++) add[i]+=k;
}
int query(int l,int r,int k){
int p=in[l],q=in[r],ans=0;
if(p==q){
for(int i=l;i<=r;i++){
if(a[i]+add[q]>=k) ans++;
}
return ans;
}
for(int i=l;i<=R[p];i++){
if(add[p]+a[i]>=k) ans++;
}
for(int i=L[q];i<=r;i++){
if(add[q]+a[i]>=k) ans++;
}
for(int i=p+1;i<=q-1;i++){
int ll=L[i],rr=R[i],tot=0;
while(ll<=rr){
int mid=(ll+rr)/2;
if(b[mid]+add[i]>=k){
rr=mid-1;
tot=R[i]-mid+1;
}
else ll=mid+1;
}
ans+=tot;
}
return ans;
}
signed main(){
n=read(),q=read();
for(int i=1;i<=n;i++) a[i]=read();
init();
while(q--){
char ch;
int l,r,k;
cin>>ch;
l=read(),r=read(),k=read();
if(ch=='M') update(l,r,k);
if(ch=='A') write(query(l,r,k)),putchar('\n');
}
}
观察到代码里特地将
//in[i]=(i-1)/size+1;
加了注释,然后没有预处理所在块,后面调用的全是
就这玩意儿还能
请求加强数据/kel
by StarLbright40 @ 2022-02-28 07:55:21
你得给点强的数据(
by Terraria @ 2022-02-28 11:01:05
@星光0000 随便随机的数据都能卡掉吧。。
by 天南星魔芋 @ 2022-02-28 14:07:01
数据好像只要不是通过非正解A就行吧?