set容器的运用+本身的lower_bound,逆序找前一个比 当前波浪小的最大波浪;
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <set>
#include <map>
using namespace std;
#define LL long long
const int MAXN=1e6+7;
int x[MAXN],y[MAXN];
set<int> sx, sy;
int main()
{
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
LL sum=0;
sx.insert(0),sy.insert(0);
for(int i=n;i>=1;i--)
{
set<int>::iterator it=sx.lower_bound(x[i]);
it--;
sum+=(x[i]-*it);
sx.insert(x[i]);
it=sy.lower_bound(y[i]);
it--;
sum+=(y[i]-*it);
sy.insert(y[i]);
}
cout<<sum<<endl;
return 0;
}

本文介绍了一种利用C++中的set容器结合lower_bound方法来高效寻找波浪序列中每个元素与其前一个最大波浪之间的距离之和的方法。通过逆序遍历序列,并在set中查找小于当前波浪的最大值,以此计算总距离。
621

被折叠的 条评论
为什么被折叠?



