제출 #1346007

#제출 시각아이디문제언어결과실행 시간메모리
1346007settopPPP (EGOI23_ppp)C++20
22 / 100
152 ms53948 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define F first
#define S second
const int MAXN=3e5+10;

typedef pair<int,int> pii;

map<int,map<int,int>> mat;
int n,m,nlos[MAXN],qq[MAXN],ans[MAXN];
vector<pii> v;
pii best[MAXN];

int32_t main(){
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin>>n>>m; v.resize(m);
    for(auto &[u,j]:v) cin>>u>>j;

    rfall(i,m-1,0){
        auto [u,j]=v[i];
        if(nlos[u]==0){
            qq[i]=m-i;
            best[i]={m-i,u};
            ans[u]++;
            mat[u][j]=i;
            nlos[j]=i;
            continue;
        }
        int dif=nlos[u]-i; qq[i]=dif;
        auto k=v[nlos[u]].F;
        if(mat[u][k]!=0){
            auto x=mat[u][k];
            qq[i]+=qq[x];
        }   
        best[i]=best[nlos[u]];
        if(best[i].F<qq[i] || (best[i].F==qq[i] && u<best[i].S)){
            best[i]={qq[i],u};
        }
        ans[best[i].S]++;
        mat[u][j]=i;
        nlos[j]=i;
    }
    fall(i,0,n-1) cout<<ans[i]<<" \n"[i==n-1];
}
#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...