Xeqwq @ 2022-06-27 10:29:30
之前发帖那个代码假了 那个就不是个分块 重写了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
#define int long long
inline int read()
{
char ch=getchar();
int x=0,f=1;
while(ch<'0'||ch >'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while('0'<=ch&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int n,q,l,r,x;
char op[3];
const int Maxn=1e6+5,Maxk=1e3+5;
int a[Maxn],k[Maxn],s[Maxn];
int lt[Maxk],rt[Maxk];
int add[Maxk];
int block,tot;
inline void kp(int p)//sort in block p
{
sort(s+lt[p],s+rt[p]+1);
}
void init()
{
cin>>n>>q;
block=sqrt(n);
for(int i=1;i<=n;i++)
{
s[i]=a[i]=read();
k[i]=(i-1)/block+1;
}
tot=bool(n%block)+block;
for(int i=1;i<=tot;i++)
{
lt[i]=(i-1)*block+1;
rt[i]=i*block;
}
rt[k[n]]=n;
for(int i=1;i<=tot;i++) kp(i);
}
void modify()
{
if(k[r]-k[l]<=1)
{
for(int i=l;i<=r;i++) a[i]+=x;
for(int i=lt[k[l]];i<=rt[k[r]];i++) s[i]=a[i];
if(k[r]!=k[l]) kp(k[r]);
kp(k[l]);
return;
}
for(int i=l;i<=rt[k[l]];i++) a[i]+=x;
for(int i=lt[k[r]];i<=r;i++) a[i]+=x;
for(int i=lt[k[l]];i<=rt[k[l]];i++) s[i]=a[i];
for(int i=lt[k[r]];i<=rt[k[r]];i++) s[i]=a[i];
for(int i=k[l]+1;i<k[r];i++) add[i]+=x;
kp(k[l]);
kp(k[r]);
}
inline int search(int p)//search in block p
{
int L=lt[p],R=rt[p],ans=rt[p]+1,mid;
int goal=x-add[p];
while(L<=R)
{
mid=(L+R)>>1;
if(s[mid]>=goal)
{
ans=mid;
R=mid-1;
}
else L=mid+1;
}
return rt[p]-ans+1;
}
inline int query()
{
int ans=0;
if(k[r]-k[l]<=1)
{
for(int i=l;i<=r;i++)
if(a[i]+add[k[i]]>=x) ans++;
return ans;
}
for(int i=l;i<=rt[k[l]];i++)
{
if(a[i]+add[k[i]]>=x) ans++;
}
for(int i=lt[k[r]];i<=r;i++)
{
if(a[i]+add[k[i]]>=x) ans++;
}
for(int i=k[l]+1;i<k[r];i++) ans+=search(i);
return ans;
}
signed main()
{
init();
while(q--)
{
scanf("%s",&op);
l=read();r=read();x=read();
if(op[0]=='M') modify();
else printf("%lld\n",query());
}
}
by ningago @ 2022-06-27 10:35:40
@整活队长xeq
不懂就问,你scanf字符串为什么加&(可能是我才疏学浅,谅解,但这玩意一直都不加
by Ruiqun2009 @ 2022-06-27 10:59:55
@ningago 的确不用加&
by Ruiqun2009 @ 2022-06-27 11:00:24
字符串本身就是一个指针
by Xeqwq @ 2022-06-27 12:19:37
不会用(
by Xeqwq @ 2022-06-27 12:20:48
然而结果好像并没有变(
所以为什么(