寒假每日一题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 未完结的主要内容,如果未能解决你的问题,请参考以下文章

寒假每日一题2022week1 未完结

2021春季每日一题 week2 未完结

2021夏季每日一题 week2 未完结

2021暑假每日一题 week2 完结

春季每日一题2022 Week 1 未完结

寒假每日一题(入门组)week3 完结