【USACO】2018 February Contest, Platinum题解

本文详细介绍了2018年USACO February Contest铂金级别的三道题目解题思路,包括T1的线段树优化、T2的直径树维护和T3的数论优化。通过分析题目,作者给出了高效算法,如T1的(O((N+M)log(N+M)))解决方案和T3的(O(N^{frac{3}{4}}+sqrt{N}*LogN))复杂度算法。
摘要由CSDN通过智能技术生成

【比赛经历】

  • 看完T1先写了一个\(O(NM)\)的暴力,交一发,得分5/10,说明正确地理解了题意。
  • 感觉T1码量挺大的,于是先放了一下。
  • T2是傻题,看完10min写掉了,得分10/10。
  • 回过头来把T1的线段树码了,一遍写对,不用痛苦地调这个鬼题,提交,得分10/10,跑了1.8s,果然STL不能乱用,差点T了。
  • 时间一共过了1.5h-。
  • 再看T3,先写了个暴力,找了找规律(还试了试OEIS),然后发现并证明了规律,过掉了。
  • 时间一共过了2h+。

【T1】Slingshot

【题目链接】

【题解链接】

【思路要点】

  • 对于每个询问,我们本质上是要求\(Min_{i=1}^{N}\{t_i+|x_i-a|+|y_i-b|\}\)。
  • 把\((a,b)\),\((x,y)\)看做平面上的点,对于每个询问\((a,b)\),我们需要找到其右上、右下、左上、左下四个矩形内某一个关于\(x\),\(y\),\(t\)的式子的最小值。
  • 把询问按横坐标排序,对纵坐标建立线段树,然后就做完了。
  • 总时间复杂度\(O((N+M)log(N+M))\)。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const int MAXV = 1e9;
const long long INF = 1e18;
template <typename T> void read(T &x) {
	x = 0; int f = 1;
	char c = getc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值