Submission #1214868

#TimeUsernameProblemLanguageResultExecution timeMemory
1214868lopkusLottery (CEOI18_lot)C++20
100 / 100
512 ms12492 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<bool> vb; typedef long long ll; typedef pair<ll,ll> pll; typedef vector<pll> vll; typedef tree<pii,null_type,less<pii>,rb_tree_tag, tree_order_statistics_node_update> oset; #define fi first #define se second #define pb push_back #define pf push_front #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define sp <<" "<< #define DEBUG(x) cout<<(#x) sp x<<endl #define carp(a,b) (((a%MOD)*(b%MOD))%MOD) #define topla(a,b) (((a%MOD)+(b%MOD))%MOD) const ll INF=1e18; const int MAXN=1e4+5; const int MAXK=105; const int MOD=1e9+7; int pref[MAXN][MAXK]; int ind[MAXN]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,l; cin>>n>>l; vi a(n+1); FORE(i,1,n+1) cin>>a[i]; int q; cin>>q; vii qq; set<int> s; FOR(i,q){ int k; cin>>k; qq.pb({k,i}); s.insert(k); } vi vec; int cnt=0; for(auto el:s){ vec.pb(el); ind[el]=cnt++; } int mx=vec.back(); int deg; int pt=vec.size()-1; for(int i=mx;i>=0;i--){ if(pt>=0 and i==vec[pt]){ deg=i; pt--; } ind[i]=ind[deg]; //cout<<"here" sp i sp ind[i]<<endl; } int p1,p2; FORE(j,2,n){ if(j+l-1>n) break; p1=1; p2=j; int say=0; FOR(i,l){ if(a[p1+i]!=a[p2+i]) say++; } //cout<<"here" sp mx sp say sp ind[say]<<endl; if(say<=mx){ pref[p1][ind[say]]++; pref[p2][ind[say]]++; } while(p1+l-1<=n and p2+l-1<=n){ if(a[p1]!=a[p2]) say--; p1++;p2++; if(p1+l-1>n or p2+l-1>n) break; if(a[p1+l-1]!=a[p2+l-1]) say++; if(say<=mx){ pref[p1][ind[say]]++; pref[p2][ind[say]]++; } } } FORE(i,1,n+1){ int once=0; FORE(j,1,vec.size()){ pref[i][j]+=pref[i][j-1]; } } FOR(j,q){ int k=qq[j].fi; FORE(i,1,n-l+2){ cout<<pref[i][ind[k]]<<' '; } cout<<endl; } }
#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...