fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long arr[5001];
  5.  
  6. vector< vector<long long int> > v;
  7.  
  8.  
  9. long long dp[5010],a[5010];
  10. long long N;
  11. int mx[5010],maxx[5010];
  12. long long recurse(int x){
  13. if(x>=N)
  14. return 0;
  15. long long ans=0;
  16.  
  17. if(dp[x]!=-1)
  18. return dp[x];
  19. long long val=0;
  20. for(int i=x;i<N;i++){
  21. if(mx[a[i]]>=x && maxx[a[i]]==i ){
  22. val^=a[i];
  23. }
  24. ans=max(ans,val+recurse(i+1));
  25.  
  26. }
  27. return dp[x]=ans;
  28. }
  29.  
  30. int main(){
  31. cin>>N;
  32. int i,j;
  33. for(i=0;i<5001;i++){
  34. mx[i]=INT_MAX;
  35. }
  36. for(i=0;i<N;i++){
  37. scanf("%lld",&a[i]);
  38. mx[a[i]]=min(i,mx[a[i]]);
  39. maxx[a[i]]=max(i,maxx[a[i]]);
  40. dp[i]=-1;
  41. }
  42.  
  43. cout<<recurse(0)<<endl;;
  44. return 0;
  45. }
Success #stdin #stdout 0s 15384KB
stdin
Standard input is empty
stdout
0