糖糖别胡说,我真的不是签到题目

糖糖别胡说,我真的不是签到题目

https://ac.nowcoder.com/acm/problem/14583

题意:n个糖糖排成一排,每个糖糖有一个能力值,第i秒第i个糖糖就会杀死前面能力比他小的人,进行m次区间加的操作,每次输入ci,表示第ci秒1~ci的糖糖能力值加一,输出最后有多少糖糖存活。


思路:


1.前m次操作可以用前缀和模拟区间加,得到每个糖糖的新能力值后从后往前维护每个队伍的最大值,当前糖糖的能力值如果大于后面敌对队伍糖糖的最大值,也就是比后面的糖糖都强,那么他存活,反之白给。复杂度图片说明 (n)。
2.如果从前往后判断第i糖糖能不能存活,还要搜索后面i-1个糖糖,复杂度图片说明 (n^2)。
3.刚开始没看懂题目看大佬博客,整了一个后缀和,一下愣是没看懂,看了2个多小时才看懂,你信?,大佬还提到扩展到n个队伍,维护一个最大值一个最小值,并保证两个不属于同一支队伍即可,复杂度也可以做到图片说明 (n)。思路差不多。


Code:


#include<bits/stdc++.h>
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
int mx[2],sum[50005],b[50005],team[50005],n,m,t,c;
int main() {
    js;
    cin>>t;
    while(t--) {
        cin>>n>>m;
        memset(sum,0,sizeof sum);
        for(int i=1;i<=n;++i)    cin>>team[i]>>b[i];
        for(int i=1;i<=m;++i) {
            cin>>c;
            ++sum[c];
        }
        mx[team[n]]=b[n]+sum[n];    mx[team[n]^1]=0;
        int cnt=1;
        for(int i=n-1;i;--i) {
            sum[i]+=sum[i+1];
            if(sum[i]+b[i]>=mx[team[i]^1])    ++cnt;
            mx[team[i]]=max(mx[team[i]],sum[i]+b[i]);
        }
        cout<<cnt<<endl;
    }
}

为雨巨打call

全部评论

相关推荐

漂亮的海豚在炒股:把西电加粗
点赞 评论 收藏
分享
#牛客AI配图神器#和波主熟的朋友们都知道,波主真的很挺贪玩的哈哈哈哈很少看八股,也不爱看。。可能你们现在拷打波主八股会支支吾吾...回想我的面试,似乎都是围绕着我会的地方问,大概是最近和宿佬还有学长学到的引导面试罢...注意,此文只适合对面试技巧提升,并不是说可以不学八股啊喂!!回忆本人的面试经验,面试官刚拿到你的简历,对你是一无所知的,那其实他会根据印象深的东西对你进行提问,所以我们在简历方面可以做一个引导。面试开头是很正常的自我介绍,很多人会觉得随便说一下就好,但其实我们可以在这里也做一个引导的,而且多说一点也可以给面试官时间看你的简历,所以这里也可以准备一下。然后就是具体提问了,对实习...
nokotan:佬tql,还很谦虚。个人决定佬说得很对,要有意把面试官提问引导到简历项目上,但前提是自己对项目一定要熟悉。项目的需求背景、难点痛点、已有方案的不足、解决方案的实现都得有认知,虽然我们实习大多数是打杂,但是不影响我们偷文档学业务。只要能把上面几个点做到自圆其说,那基本就有6、7成把握了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务