Acwing第 3 场周赛完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 3 场周赛完结相关的知识,希望对你有一定的参考价值。
目录
3660. 最短时间 【难度: 简单 / 知识点: 思维】
看四个角到这个点的最远距离
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n,m,r,c; cin>>n>>m>>r>>c;
cout<<max(abs(1-r),abs(n-r))+max(abs(m-c),abs(1-c))<<endl;
}
return 0;
}
3661. 重置数列 【难度: 简单 / 知识点: 暴力】
总的数据范围很小
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,k;
int main(void)
{
int t; cin>>t;
while(t--)
{
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
int ans=1e9;
for(int i=1;i<=100;i++)
{
int cnt=0;
for(int j=1;j<=n;j++) if(a[j]!=i) cnt++,j=j+k-1;
ans=min(ans,cnt);
}
cout<<ans<<endl;
}
return 0;
}
3662. 最大上升子序列和 【难度: 难 / 知识点: DP 树状数组 离散化】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5+10;
int n;
int w[N];
LL tr[N];
vector<int>xs;
LL f[N];
int get(int x)
{
return lower_bound(xs.begin(),xs.end(),x)-xs.begin()+1;
}
int lowbit(int x)
{
return x&-x;
}
void add(int x,LL v)
{
for(int i=x;i<=n;i+=lowbit(i)) tr[i]=max(tr[i],v);
}
LL query(int x)
{
LL res=0;
for(int i=x;i;i-=lowbit(i)) res=max(res,tr[i]);
return res;
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>w[i];
xs.push_back(w[i]);
}
sort(xs.begin(),xs.end());
xs.erase(unique(xs.begin(),xs.end()),xs.end());
LL res=0;
for(int i=0;i<n;i++)
{
int k=get(w[i]);
f[i]=query(k-1)+w[i];//以w[i]结尾的上升子序列的最大和
res=max(res,f[i]);
add(k,f[i]);
}
printf("%lld",res);
return 0;
}
以上是关于Acwing第 3 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章