您的位置:首页 > 其它

CF Round422 Div2 PC(水题)

2017-07-10 09:45 162 查看
这么水的题居然看了题解还wa了四次简直是丢脸

思路倒是很简单的,就是我把每个区间用l和r分别保存,保存到

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define maxn 201000
#define ll long long

using namespace std;

const long long inf=1e18;
vector<pair<ll,ll> >l[maxn],r[maxn];
ll c[maxn];

int main()
{
int n,x;
ll ans;
while(~scanf("%d %d",&n,&x))
{
ans=inf;
for (int k=1;k<=n;k++)
{
ll lll,rr,cc;
scanf("%I64d %I64d %I64d",&lll,&rr,&cc);
l[lll].push_back(make_pair(rr-lll+1,cc));
r[rr].push_back(make_pair(rr-lll+1,cc));
}
for (int k=0;k<maxn;k++)
c[k]=inf;

//cout<<11111<<endl;
for (int i=1;i<=200000;i++)
{
for (int j=0;j<l[i].size();j++)
{
int val=(x-l[i][j].first);
if (val<0) continue;
if (c[val]!=inf) ans=min(c[val]+l[i][j].second,ans);
}
//cout<<i<<endl;
for (int j=0;j<r[i].size();j++)
{
c[r[i][j].first]=min(c[r[i][j].first],r[i][j].second);
}

}
if (ans!=inf)
printf("%I64d\n",ans);
else printf("-1\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: