关于昨晚CF的C和D1
  • 板块学术版
  • 楼主Cocoly1990
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/8/25 08:24
  • 上次更新2023/11/4 09:07:43
查看原帖
关于昨晚CF的C和D1
183026
Cocoly1990楼主2021/8/25 08:24

太困了,没打满

昨晚的C1睡觉的时候胡了一个贪心,就是预处理出每个洞穴进去时至少需要的力量,然后排序,不知道对不对

D1写了一个树状数组维护,但算数的过程中不知道哪里有问题,Wa on pretest 3

求各位Dbug

#include<bits/stdc++.h>
using namespace std ;
int tree[20000007] , n , m , ch , x , y , Mod ;
int lowbit(int x)
{
	return x & (- x) ;
}
int sum(int x)
{
	int ans = 0 ;
	while(x)
	{
		ans += tree[x] % Mod ;
		x -= lowbit(x) ;
	}
	return ans ;
}
void add(int x , int num)
{
	while(x <= n)
	{
		tree[x] += num % Mod ;
		x += lowbit(x) ;
	}
}
int query(int x , int y)
{
	//if(x > y) swap(x , y) ;
	return sum(y) % Mod - sum(x - 1) % Mod ;
}
int main()
{
	cin >> n >> Mod ;
	add(n , 1) ;
	//cout << query(n , n) ;
	for(int i = n - 1 ; i >= 1 ; i --)
	{
		// dp[i] = dp[i + 1 ~ n] + dp[1]
		// 3 -> 1 2->1 1 -> 2 + 
		m = 0 ;
		m = query(i + 1 , n) % Mod ;
		//cout << m << " " ;
		int j ;
		for(j = 2 ; j * i <= n ; j ++) m += query(min(n , j * i) , min(n , j * i + j - 1)) % Mod ;
		//if(j * i <= n) m += query(j * i , min(n , j * i + j - 1)) ;
		//cout << m << endl ;
		add(i , m % Mod) ;
	}
	cout << (sum(1) + Mod) % Mod ;
	return 0 ;
}
2021/8/25 08:24
加载中...