天天看點

Codeforces Round #416 (Div. 2)

位址:​​點我​​

A. Vladik and Courtesy

模拟

#include<iostream>
using namespace std;
int main(){
  int n,m;
  scanf("%d%d",&n,&m);
  int flag1=0,flag2=0;
  for(int i=1;i<=1e9;i++){
    if(i*i>n){
      flag1=i;
      break;
    }
  }
  for(int i=1;i<=1e9;i++){
    if(i*i+i>m){
      flag2=i;
      break;
    }
  }
  if(flag2<flag1){
    printf("Valera\n");
  }
  else{
    puts("Vladik");
  }
  
}      
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e4+20;
int a[N];
int main(){
  int n,m;
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++){
    scanf("%d",&a[i]);
  }
  while(m--){
    int l,r,x;
    scanf("%d%d%d",&l,&r,&x);
    int count=0;
    for(int i=l;i<=r;i++){
      if(a[x]>a[i]){
        count++;
      }
    }
    if(count==x-l){
      puts("Yes");
    }
    else{
      puts("No");
    }
  }
}      
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 5000+10, inf = 0x3f3f3f3f;
int n, l[N], r[N], a[N], dp[N];
bool vis[N];

int main(){
    
    scanf("%d", &n);
    memset(l, inf, sizeof(l));
    memset(r, 0, sizeof(r));
    for(int i=1; i<=n; ++i){
        
        scanf("%d", &a[i]);
        l[a[i]] = min(l[a[i]], i);
        r[a[i]] = max(r[a[i]], i);
    }
    
    for(int i=1; i<=n; i++){
        
      
        dp[i]= dp[i-1];
        int L = l[a[i]], R = r[a[i]], t = a[i];
        if(R>i) continue;
        memset(vis, 0, sizeof(vis));
        vis[a[i]] = 1;
        for(int j=i;j>0;j--){
            
            if(!vis[a[j]]){
                
                vis[a[j]] = 1;
                t ^= a[j];
            }
            L = min(L, l[a[j]]);
            R = max(R, r[a[j]]);
            if(L==j && R==i) dp[i] = max(dp[i], dp[L-1]+t);
            if(R>i) break;
        }
    }
   
    printf("%d\n",dp[n]);
    return 0;
}