青石巷-比赛吃饭 全WA
  • 板块题目总版
  • 楼主Farkas_W
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/8 21:30
  • 上次更新2023/11/6 20:54:10
查看原帖
青石巷-比赛吃饭 全WA
109220
Farkas_W楼主2020/8/8 21:30

题目在这里

#include<iostream>//未过 0 全WA 
#include<cmath>//  https://www.luogu.com.cn/problem/T125902
#include<cstdio>
#include<cstring>
using namespace std;
inline int read()
{
	int x=0,f=1;
	char c;c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<3)+(x<<1)+(c-'0');
		c=getchar();
	}
	return x*f;
}
const int N=1e6+5,M=1e4+5;
int k,n,m,sum[N*4],add[N*4];
void build(int k,int l,int r)
{
	if(l==r){
		sum[k]=read();
		return;
	}
	int mid=l+r>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	sum[k]=sum[k<<1]+sum[k<<1|1];
}
void Add(int k,int l,int r,int v)
{
	add[k]+=v;
	sum[k]+=(r-l+1)*v;
	return;
}
void pushdown(int k,int l,int r,int mid)
{
	if(add[k]==0)return;
	Add(k<<1,l,mid,add[k]);
	Add(k<<1|1,mid+1,r,add[k]);
	add[k]=0;
}
void change(int k,int l,int r,int x,int y,int v)
{
	if(l>=x&&r<=y){
		Add(k,l,r,v);
		return;
	}
	int mid=l+r>>1;
	pushdown(k,l,r,mid);
	if(x<=mid)change(k<<1,l,mid,x,y,v);
	if(y>mid)change(k<<1|1,mid+1,r,x,y,v);
	sum[k]=sum[k<<1]+sum[k<<1|1];
}
int query(int k,int l,int r,int x,int y)
{
	if(l>=x&&r<=y){
		return sum[k];
	}
	int mid=l+r>>1,res=0;
	pushdown(k,l,r,mid);
	if(x<=mid)res+=query(k<<1,l,mid,x,y);
	if(y>mid)res+=query(k<<1|1,mid+1,r,x,y);
	return res;
}
int main()
{
	int i;
	n=read();
	build(1,1,n);
	m=read();k=read();
	while(m--)
	{
		int x,y,v;
		x=read();y=read();v=read();
		change(1,1,n,x,y,v);
	}
	int maxx=0;
	for(i=1;i<=n-k+1;i++)
	{
		maxx=max(maxx,query(1,1,n,i,i+k-1));
	}
	printf("%d",maxx);
	return 0;
}
2020/8/8 21:30
加载中...