Submission #411628

#TimeUsernameProblemLanguageResultExecution timeMemory
411628RGBBBread First Search (CCO21_day2problem2)C++14
25 / 25
63 ms13536 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pp;
const int MAX=200000;
int n,m,outp,adj[MAX],leftmost[MAX],diff[MAX];
vector<int>best[MAX];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m;
    for(int i=0;i<n;i++)adj[i]=(1<<30);
    for(int i=0;i<n;i++)leftmost[i]=(1<<30);
    for(int i=0;i<m;i++){
        int a,b;
        cin>>a>>b;
        a--;
        b--;
        adj[max(a,b)]=min(adj[max(a,b)],min(a,b));
    }
    leftmost[n-1]=min(adj[n-1],n-2);
    for(int i=n-2;i>=0;i--)leftmost[i]=min(leftmost[i+1],min(adj[i],i-1));
    for(int i=0;i<n;i++){
        if(adj[i]==(1<<30))continue;
        diff[adj[i]+1]++;
        if(i+1<n)diff[i+1]--;
    }
    for(int i=1;i<n;i++)diff[i]+=diff[i-1];
    int cur=0;
    for(int i=n-1;i>=1;i--){
        for(int y:best[i])cur=max(cur,y);
        best[leftmost[i]].push_back(cur+diff[i]);
        if(i==1)cout<<n-1-cur-diff[i]<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...