Submission #410449

#TimeUsernameProblemLanguageResultExecution timeMemory
410449JasiekstrzTeleporters (IOI08_teleporters)C++17
100 / 100
793 ms65536 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int N=1e6;
struct Point
{
	int x,id;
	bool en;
	Point(int _x=0,int _id=0,int _en=0) : x(_x),id(_id),en(_en) {};
	bool operator<(const Point &oth) const
	{
		return x<oth.x;
	}
};
array<int,2> t[N+10];
vector<Point>::iterator pos[N+10][2];
bool vis[N+10][2];
vector<Point> st;
vector<int> siz;
int dfs(vector<Point>::iterator x)
{
	int ans=0;
	while(x!=st.end() && !vis[(x->id)][(x->en)])
	{
		vis[(x->id)][(x->en)]=true;
		ans++;
		x=next(pos[(x->id)][!(x->en)]);
	}
	return ans;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>t[i][0]>>t[i][1];
		st.push_back(Point(t[i][0],i,0));
		st.push_back(Point(t[i][1],i,1));
	}
	sort(st.begin(),st.end());
	for(auto it=st.begin();it!=st.end();it++)
		pos[(it->id)][(it->en)]=it;
	int ans=dfs(st.begin());
	for(int i=1;i<=n;i++)
	{
		for(int j:{0,1})
		{
			if(!vis[i][j])
				siz.push_back(dfs(pos[i][j]));
		}
	}
	sort(siz.begin(),siz.end());
	while(m--)
	{
		if(siz.empty())
		{
			ans++;
			siz.push_back(1);
		}
		else
		{
			ans+=2+siz.back();
			siz.pop_back();
		}
	}
	cout<<ans<<"\n";
	return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...