寒假每日一题2022week2 未完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假每日一题2022week2 未完结相关的知识,希望对你有一定的参考价值。
目录
1987. 粉刷栅栏【扫描线】
扫描线,注意将一个区间的左端点表示该区间。这样可以避免处理各种边界问题。
#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
int n,x;
void insert(int l,int r,int c)
mp[l]+=c;
mp[r+1]-=c;//注意这里是故意是r,因为区间[1,2]是一个区间,不是俩点
int main(void)
cin>>n;
while(n--)
int c;
char op;
cin>>c>>op;
if(op=='R') insert(x,x+c-1,1),x=x+c;
if(op=='L') insert(x-c,x-1,1),x=x-c;
int sum=0,ans=0,last;
for(auto i=mp.begin();i!=mp.end();i++)
if(sum>=2) ans+=i->first-last;
sum+=i->second;
last=i->first;
cout<<ans;
return 0;
1978. 奶牛过马路【前缀最值】
按a排序,看b,如果不相交则前面的最大b不能比它的b大,且它后面的最小的b大于当前的b.
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,maxv[N],minv[N],cnt;
vector<pair<int,int>>ve;
int main(void)
cin>>n; ve.push_back(-1e9,-1e9);
for(int i=0;i<n;i++)
int l,r; cin>>l>>r;
ve.push_back(l,r);
sort(ve.begin()+1,ve.end());
maxv[0]=-1e9;
for(int i=1;i<=n;i++) maxv[i]=max(maxv[i-1],ve[i].second);
minv[n+1]=1e9;
for(int i=n;i>=1;i--) minv[i]=min(minv[i+1],ve[i].second);
for(int i=1;i<=n;i++)
if(maxv[i-1]<ve[i].second&&minv[i+1]>ve[i].second) cnt++;
cout<<cnt;
return 0;
1969. 品种邻近【哈希表】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,k,ans=-1;
map<int,int>mp;
int main(void)
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
if(mp[a[i]]&&i-mp[a[i]]<=k) ans=max(ans,a[i]);
mp[a[i]]=i;
cout<<ans;
return 0;
以上是关于寒假每日一题2022week2 未完结的主要内容,如果未能解决你的问题,请参考以下文章