제출 #1352647

#제출 시각아이디문제언어결과실행 시간메모리
1352647hyyhDolls (NOI23_dolls)C++20
100 / 100
67 ms8804 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>

#define int long long

using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)

int const N = 5e5+10;

int par[N];
int si[N];

int find(int n){
    if(par[n] == n) return n;
    else return par[n] = find(par[n]);
}

signed main(){
    int n;cin >> n;
    for(int i{};i < N;i++) par[i] = i;
    int ans = 0;
    for(int i{};i < n;i++){
        int g;cin >> g;
        if(si[g]) {cout << ans << " ";continue;}
        si[g] = 1;
        int fibe = find(g-1);
        int fifr = find(g+1);
        //cout << fibe << " " << fifr << endl;
        if(si[fibe]){
            ans -= ((si[fibe]+1)/2);
            par[fibe] = g;
            si[g] += si[fibe];
        }
        if(si[fifr]){
            ans -= ((si[fifr]+1)/2);
            par[fifr] = g;
            si[g] += si[fifr];
        }
        ans += (si[g]+1)/2;
        cout << ans << " ";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...