Submission #1192360

#TimeUsernameProblemLanguageResultExecution timeMemory
1192360meisgoodFinancial Report (JOI21_financial)C++20
100 / 100
1424 ms96892 KiB
#include <bits/stdc++.h> using namespace std ; #define int long long int gp[300003] ; int dsu(int x){ if (x==gp[x]) return x ; gp[x]=dsu(gp[x]) ; return gp[x] ; } int ml[300003] ; struct segt { int seg[1200003] ; void build(int id,int l,int r){ if (l==r) seg[id]=0 ; else { int md=(l+r)/2 ; build(id*2,l,md),build(id*2+1,md+1,r) ; } } void upd(int id,int l,int r,int x,int v){ if (l==r&&l==x) seg[id]=v ; else if (l>x||r<x) return ; else { int md=(l+r)/2 ; upd(id*2,l,md,x,v),upd(id*2+1,md+1,r,x,v) ; seg[id]=max(seg[id*2],seg[id*2+1]) ; } } int query(int id,int l,int r,int ql,int qr){ if (ql<=l&&r<=qr) return seg[id] ; else if (l>qr||r<ql) return 0 ; else { int md=(l+r)/2 ; return max(query(id*2,l,md,ql,qr),query(id*2+1,md+1,r,ql,qr)) ; } } } ; signed main(){ int n,d,i,j ; cin >> n >> d ; for (i = 1 ; i <= n ; i ++) gp[i]=i ; int arr[300003] ; set <int> st ; for (i = 1 ; i <= n ; i ++) cin >> arr[i],st.insert(arr[i]) ; i=1 ; map <int,int> mp ; for (auto x : st){ mp[x]=i ; i++ ; } for (i = 1 ; i <= n ; i ++) arr[i]=mp[arr[i]] ; set <int> stt ; map <int,vector<int>> vvv ; segt seg ; seg.build(1,1,n) ; for (i = 1 ; i <= n ; i ++) vvv[arr[i]].push_back(i) ; for (auto [a,v] : vvv){ for (auto x : v){ stt.insert(x) ; auto it=stt.find(x) ; if (it!=stt.begin()){ auto it2=it ; it2-- ; if (abs(*it2-*it)<=d) gp[dsu(*it)]=dsu(*it2) ; } if (it!=--stt.end()){ auto it2=it ; it2++ ; if (abs(*it2-*it)<=d) gp[dsu(*it2)]=dsu(*it) ; } } for (auto x : v) ml[x]=dsu(x) ; // for (i = 1 ; i <= n ; i ++) cout << dsu(i) << " " ; cout << endl ; } // for (i = 1 ; i <= n ; i ++) cout << ml[i] << " " ; cout << endl ; for (auto [a,v] : vvv){ reverse(v.begin(),v.end()) ; for (auto x : v){ seg.upd(1,1,n,x,seg.query(1,1,n,ml[x],x)+1) ; } } cout << seg.query(1,1,n,1,n) << endl ; 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...