Submission #557294

#TimeUsernameProblemLanguageResultExecution timeMemory
557294Koosha_mv벽 칠하기 (APIO20_paint)C++14
100 / 100
455 ms16228 KiB
#include <bits/stdc++.h> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<x.F<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first #include "paint.h" const int N=1e5+99; int n,m,k,a[N],ps[N],last[N],col[N],pfx[N],sfx[N],fenwik[N]; vector<int> vec[N]; void add(int x, int val){ for(x++;x<N;x+=x&-x) minm(fenwik[x],val); } int get(int x) { int res=N; for (x++;x>0;x-=x&-x) minm(res,fenwik[x]); return res; } int minimumInstructions(int _n, int _m, int _k,vector<int> C,vector<int> B,vector<std::vector<int>> A) { n=_n,m=_m,k=_k; f(i,0,n) col[i]=C[i],vec[col[i]].pb(i); f(i,0,m){ for(auto x : A[i]){ for(auto indx : vec[x]){ if(a[indx-1]==i || last[indx-1]==i){ last[indx]=a[indx]; a[indx]=i+1; pfx[indx-i]=i+1; } } } } f(i,0,N) a[i]=last[i]=0; f(i,0,m){ for(auto x : A[m-i-1]){ for(auto indx : vec[x]){ if(a[indx+1]==i || last[indx+1]==i){ last[indx]=a[indx]; a[indx]=i+1; sfx[indx+i]=i+1; } } } } //dbga(pfx,0,n); //dbga(sfx,0,n); f(i,0,n+1){ int l,r=i+pfx[i]; if(i==0) l=0; else l=i-sfx[i-1]; r-=m; if(l<=r) ps[l]++,ps[r+1]--; } f(i,0,n) ps[i]+=ps[i-1]; fill(fenwik,fenwik+N,N); add(n,0); f_(i,n-m,0){ if(ps[i]){ int res=get(i+m)+1; add(i,res); } } if(get(0)==N) return -1; return get(0); } /* int32_t main(){ ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0); int n,m,k; vector<int> C,A; vector<vector<int>> B; cin>>n>>m>>k; f(i,0,n){ int x; cin>>x; C.pb(x); } f(i,0,m){ int x; cin>>x; A.pb(x); } f(i,0,m){ vector<int> v; B.pb(v); f(j,0,A[i]){ int x; cin>>x; B[i].pb(x); } } cout<<minimumInstructions(n,m,k,C,A,B); }*/ /* 8 3 5 3 3 1 3 4 4 2 2 3 2 2 0 1 2 2 3 3 4 */
#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...