codeforces round 416 div2补题

来源:互联网 发布:好听网络歌曲排行榜 编辑:程序博客网 时间:2024/05/21 21:41

第一题,水题

A. Vladik and Courtes

#include<bits/stdc++.h>using namespace std;int main(){long long a,b;cin>>a>>b;long long t1=0,t2=0;for(int i=1;;i++){t1=t1+2*i-1;t2=t2+2*i;if(t1>a){cout<<"Vladik"<<endl;break;}if(t2>b){cout<<"Valera"<<endl;break;}
}}

第二题,我想复杂了想到区间求第k大还写了主席树==其实就是暴力的题

B. Vladik and Complicated Book

#include<bits/stdc++.h>  using namespace std;  const int  maxn=1e4+10;  int rt[20*maxn];  int sum[20*maxn],ls[20*maxn],rs[20*maxn];  int a[maxn],b[maxn];  int cnt;  void build(int& node,int l,int r)  {      node=++cnt;      sum[node]=0;      if(l==r) return ;      int mid=(l+r)>>1;      build(ls[node],l,mid);      build(rs[node],mid+1,r);  }  void update(int& now,int pre,int l,int r,int p)  {      now=++cnt;      ls[now]=ls[pre];      rs[now]=rs[pre];      sum[now]=sum[pre]+1;      if(l==r) return ;      int mid=(l+r)>>1;      if(p>mid) update(rs[now],rs[pre],mid+1,r,p);      else update(ls[now],ls[pre],l,mid,p);        }  int query(int pre,int now,int l,int r,int k)  {      if(l==r)      return b[l];      int mid=(l+r)>>1;      int c=sum[ls[now]]-sum[ls[pre]];      if(k<=c) return query(ls[pre],ls[now],l,mid,k);      else return query(rs[pre],rs[now],mid+1,r,k-c);  }  int main()  {      int t,n,m,ql,qr,k;          cnt=0;          scanf("%d %d",&n,&m);          for(int i=1;i<=n;i++)          {              scanf("%d",a+i);              b[i]=a[i];          }          sort(b+1,b+1+n);          int len=unique(b+1,b+1+n)-(b+1);          build(rt[0],1,len);          for(int i=1;i<=n;i++)          a[i]=lower_bound(b+1,b+1+len,a[i])-b;          for(int i=1;i<=n;i++)          update(rt[i],rt[i-1],1,len,a[i]);          for(int i=1;i<=m;i++)          {               scanf("%d %d %d",&ql,&qr,&k);               if(k>qr||k<ql)             {             cout<<"Yes"<<endl;             continue;             }             int tmp=query(rt[ql-1],rt[qr],1,len,k-ql+1); if(tmp==a[k]) cout<<"Yes"<<endl; else cout<<"No"<<endl;  

}

c.比赛时写到这题就gg了想不出来。

C. Vladik and Memorable Trip

#include<bits/stdc++.h>using namespace std;int a[5100],cnt[5100];int t[5100][5100];int dp[5100];bool vis[5100];int ans;int  main(){int n;cin>>n;for(int i=1;i<=n;i++){ cin>>a[i]; cnt[a[i]]++;    }    memset(t,-1,sizeof(t));    for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));ans=0;int sum=0;for(int j=i;j<=n;j++){if(!vis[a[j]]){ vis[a[j]]=1; ans=ans^a[j]; sum+=cnt[a[j]];    }if(sum==j-i+1){t[i][j]=ans;}}} for(int i=n;i>=1;i--){     dp[i]=dp[i+1];for(int j=i;j<=n;j++){if(t[i][j]!=-1)dp[i]=max(dp[i],dp[j+1]+t[i][j]); }}cout<<dp[1]<<endl;} 


原创粉丝点击