Submission #1114269

#TimeUsernameProblemLanguageResultExecution timeMemory
1114269epicci23Sličnost (COI23_slicnost)C++17
17 / 100
250 ms199112 KiB
#include "bits/stdc++.h"
#define int long long
#define all(v) v.begin() , v.end()
#define sz(a) (int)a.size()
using namespace std;

const int N = 5005;

void _(){
  int n,k,q;
  cin >> n >> k >> q;
  int a[n+5],b[n+5];
  for(int i=1;i<=n;i++) cin >> a[i];
  for(int i=1;i<=n;i++) cin >> b[i];
  
  bitset<N> bs[N];

  for(int i=1;i+k-1<=n;i++) for(int j=i;j<=i+k-1;j++) bs[i][a[j]]=1;
  	
  int ans[n+5][n+5],tot[n+5];
  memset(ans,-1,sizeof(ans));
  memset(tot,0,sizeof(tot));
  

  for(int i=1;i+k-1<=n;i++){
  	int res = 0,p = 0;
  	while(p<n){
  	  p++;
  	  if(bs[i][b[p]]) res++;
  	  if(p>k && bs[i][b[p-k]]) res--;
  	  if(p>=k){
  	  	ans[i][p-k+1]=res;
  	  	tot[res]++;
  	  }
  	}
  }
  
  for(int i=k;i>=0;i--){
  	if(tot[i]){
  	  cout << i << ' ' << tot[i] << '\n';
  	  break;
  	}
  }

  while(q--){
  	int ind; cin >> ind;
   
    for(int i=1;i<=n;i++) if(ans[ind+1][i]!=-1) tot[ans[ind+1][i]]--;
    if(ind>=k){
    	for(int i=1;i<=n;i++) if(ans[ind-k+1][i]!=-1) tot[ans[ind-k+1][i]]--;
    }

    bs[ind+1][a[ind+1]]=0;
    if(ind>=k) bs[ind-k+1][a[ind]]=0;
    swap(a[ind],a[ind+1]);
    bs[ind+1][a[ind+1]]=1;
    if(ind>=k) bs[ind-k+1][a[ind]]=1;
    
    int p = 0, res = 0;
    while(p<n){
  	  p++;
  	  if(bs[ind+1][b[p]]) res++;
  	  if(p>k && bs[ind+1][b[p-k]]) res--;
  	  if(p>=k){
  	  	//cout << ind+1 << ' ' << p-k+1 << ' ' << res << '\n';
  	  	ans[ind+1][p-k+1]=res;
  	  	tot[res]++;
  	  }
  	}
    
    if(ind>=k){
	    p = 0, res = 0;
	    while(p<n){
	  	  p++;
	  	  if(bs[ind-k+1][b[p]]) res++;
	  	  if(p>k && bs[ind-k+1][b[p-k]]) res--;
	  	  if(p>=k){
	  	  	//cout << ind-k+1 << ' ' << p-k+1 << ' ' << res << '\n';
	  	  	ans[ind-k+1][p-k+1]=res;
	  	  	tot[res]++;
	  	  }
	  	}
    } 

    for(int i=k;i>=0;i--){
     if(tot[i]){
  	  cout << i << ' ' << tot[i] << '\n';
  	  break;
  	 }
    }
  }
}

int32_t main(){
  cin.tie(0); ios::sync_with_stdio(0);
  int tc=1;//cin >> tc;
  while(tc--) _();
  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...