蒟蒻做了一天线段树,表示心态炸裂,从未想到线段树还有这么多操作(已狗带)。
传送门:BZOJ3387
题意
Farmer John 为奶牛们设置了一个障碍赛。障碍赛中有n个(n≤50000)各种长度的栅栏,每个都与x轴平行,其中的第i个栅栏的y坐标为i。
终点在坐标原点(0,0),起点在(s,n)。如下所示,×为终点,s为起点。
奶牛们很笨拙,它们都是绕过栅栏而不是跳过去的。也就是说它们会沿着栅栏走直到走到栅栏头,然后向着x轴奔跑,直到碰到下一个栅栏拦住去路,然后再绕过去……
求奶牛从起点到终点需要走的最短水平距离。
数据范围
n≤50000 |s|≤100000
-100000≤ai<bi≤100000,an≤s≤bn (ai,bi分别代表第i个栅栏的两个端点的横坐标)
题解
本蒟蒻怎么可能会做?orzzzzz
于是自己yy了一种方法,居然依靠水数据得了七十分。
就是这样的愚蠢。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define INF 1e7
using namespace std;
const int N=5e4+10;
int n,s,ans;
struct P{
int x;
bool in;
}t[N<<2];
int fr,to;
inline int read()
{
char c=getchar();int x=0,t=1;
while(c<'0' || c>'9') {
if(c=='-') t=-1;c=getchar();}
while(c<='9' && c>='0') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}