北京Day 11

今日得分:100+100+(15or24)

T1

题目大意:对于1<=i<=n,求出∑max(0, ci −∣x − i∣^2 )。n<=100000,c<=10^12。

正解:1.使用线段数据结构(树状数组、线段树)维护出每个位置的二次函数然后求值。

2.考虑每个点对答案的贡献,差分

T1AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cmath>
#include<bitset>
#include<map>
using namespace std;
inline long long re_ad()
{
	long long x=0;int f=1;char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
	return x*f;
}
int n;
long long c[100010],xfc[100010],xic[100010],ifc[100010],cc[100010];
inline long long ma(long long x,long long y){return x>y?x:y;}
inline long long mi(long long x,long long y){return x<y?x:y;}
void pu_t(long long x){if(x>9)pu_t(x/10);putchar(x%10+48);}
int main()
{
	register int l,r;
	register long long i,x,y;
	n=re_ad();
	for(i=1;i<=n;i++)c[i]=re_ad();
	for(i=1;i<=n;++i)
	{
	x=sqrt(c[i]);l=ma(1,i-x);r=mi(n,i+x)+1;
	++xfc[l];--xfc[r];
	xic[l]-=(i<<1);xic[r]+=(i<<1);
	ifc[l]+=1ll*i*i;ifc[r]-=1ll*i*i;
	cc[l]+=c[i];cc[r]-=c[i];
	}
	for(i=1;i<=n;++i)
	{
	xfc[i]+=xfc[i-1];xic[i]+=xic[i-1];ifc[i]+=ifc[i-1];cc[i]+=cc[i-1];
	x=1ll*i*i;
	pu_t(cc[i]-ifc[i]-1ll*i*xic[i]-x*xfc[i]);
	putchar(' ');
	}
}

T2

题目大意:求一个无向带权图若干个关键点之间的“最小连通距离”。

正解:详见ppt

T2AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值