您当前的位置: 首页 > 

先求一个导

暂无认证

  • 1浏览

    0关注

    291博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

牛客手速月赛 48 C(差分都玩不明白了属于是)

先求一个导 发布时间:2022-04-22 21:51:07 ,浏览量:1

不想玩辣!   好久没打牛客了,第二题连wa5发,心态有点炸。天天做天梯赛的题都有点不知道罚时,就硬莽夫,是个坏习惯。罢了,收拾收拾退役了。 题目 题意: 给定n个编号从1到n的区间,给定len,求有多少个区间满足长度为len且与区间相交的数量最多且权重最大。 权重: 所有相交区间的编号和。 思路: 稍微想想就知道,每次只移动一个格子,把信息预处理出来即可。傻了,非得用vector处理。这里和差分非常像的,但是不能在消失的地方–,因为可能区间左端点还在区间中。只需要多开一个数组记录所有给定区间的右端点,在枚举的时候减去即可。 !注意右端点最大是5e6+5e6 时间复杂度: O(n) 代码:

#include
using namespace std;
const int N = 1e7+10;
typedef long long ll;
int n,m,k,T;
int b[N],bb[N];
ll w[N],ww[N];
ll ans = 0;
ll mx = 0;
ll quan = 0;
void solve()
{
	cin>>n>>m;
	for(int i=1;i>x>>y;
		b[x]++,bb[y]++;
		w[x]+=i,ww[y]+=i;
	}
	ll now;ll sum;
    for(int i=1;iquan))
        {mx = now; quan = sum; ans = 0;}
        if(now==mx&&sum==quan) ans++;
    }
	coutT;
	while(T--)
	solve();
	return 0;
}
关注
打赏
1662037414
查看更多评论
立即登录/注册

微信扫码登录

0.0408s