连T带WA求助
查看原帖
连T带WA求助
866613
sansesantongshun楼主2024/6/9 13:36
#include<bits/stdc++.h>
using namespace std;
int n,m,nm,b[100005],l[320],r[320],k,x,y,z,ans[100005];
long long c[320];
struct node
{
	int id;
	long long n;
	bool k;
} a[100005];
bool operator<(node x,node y)
{
	return x.n<y.n;
}
vector<node> aa[100005];
int read()
{
	int result=0,k=1;
	char ch=getchar();
	while (ch<'0' || ch>'9')
	{
		if (ch=='-')
		k=-1;
		ch=getchar();
	}
	while ('0'<=ch && ch<='9')
	{
		result=result*10+(ch^48);
		ch=getchar();
	}
	return k*result;
}
void write(int x)
{
	if (x>=10)
	write(x/10);
	putchar(x%10|48);
}
int main()
{
	memset(ans,-1,sizeof(ans));
    n=read();
    m=read();
    ++m;
    nm=round(sqrt(m));
    for (int i=1;i<=n;++i)
    {
    	x=read();
    	aa[i].push_back((node){1,x,1});
    	aa[i+1].push_back((node){1,-x,1});
	}
	for (int i=1;i<=m;++i)
	{
		a[i].id=i;
		b[i]=(i-1)/nm+1;
		if (l[b[i]]==0)
    	l[b[i]]=i;
    	r[b[i]]=i;
	}
	for (int i=2;i<=m;++i)
	{
		k=read();
		if (k==1)
		{
			x=read();
			y=read();
			z=read();
			aa[x].push_back((node){i,z,1});
			aa[y+1].push_back((node){i,-z,1});
		}
		else
		{
			x=read();
			y=read();
			aa[x].push_back((node){i-1,y,0});
		}
	}
	for (int i=1;i<=n;++i)
	for (node nd:aa[i])
	if (nd.k)
	{
		for (int j=l[b[nd.id]];j<=r[b[nd.id]];++j)
		if (a[j].id>=nd.id)
		a[j].n+=nd.n;
		sort(a+l[b[nd.id]],a+r[b[nd.id]]+1);
		for (int j=b[nd.id]+1;j<=b[m];++j)
		c[j]+=x;
	}
	else
	{
		ans[nd.id]=0;
		for (int j=1;j<b[nd.id];++j)
		ans[nd.id]+=r[j]-(lower_bound(a+l[j],a+r[j]+1,(node){0,nd.n-c[j],0})-a)+1;
		for (int j=l[b[nd.id]];j<=r[b[nd.id]];++j)
		if (a[j].id<=nd.id && a[j].n+c[b[j]]>=nd.n)
		++ans[nd.id];
	}
	for (int i=1;i<m;++i)
	if (ans[i]!=-1)
	{
		write(ans[i]);
		putchar('\n');
	}
}
2024/6/9 13:36
加载中...