首页 > 其他分享 >计数问题专题

计数问题专题

时间:2023-11-15 16:23:02浏览次数:35  
标签:专题 int ll 复杂度 xs 计数问题 线段

鉴于我之前每次考试计数问题都会错一大堆, 所以我滚过来写总结了

先膜拜贡献了这个题单@feecle6418

以下题目笔者没有事先做过, 和大家一起做, 所以会有一些不成熟的思路, 但是同时也会更好的展示思维路径.

我们先来看几道题来醒醒脑子

洛谷 P6146 Help Yourself G

题意简述:

现在有 $n (n \le 10 ^ 5) $ 条线段, 对于每一个线段的组合, 我们令他产生的连通块数量为他的复杂度, 求所有组合的复杂度之和

(可能不清楚, 左边题目右边博客效果更佳)

首先一个很典的设计是令 \(f_i\) 表示考虑了前 \(i\) 条线段的复杂度, 考虑转移. 我也知道要转移啊

我们思考, 什么时候新加入的这个线段会对答案产生贡献.

思考一下, 一会儿再看答案


首先, 每一个之前的方案都会和这个产生一个组合, ans翻倍

没错, 就是当一个方案与这个线段没有交点的时候.

我们去统计在这之前和自己没有交集的线段数目, 那么这个线段对答案额外贡献就是 \(2 ^ n\)
(每个都可以选或不选, 都不选也是一种方案)

那么我们先将线段离散, 然后线段树维护即可.

具体的, 我们先把所有的线段按照左端点排序, 然后我们只需要统计右端点小于自己的即可.

时间复杂度\(O(n \log n)\)

代码:

//start at 15:38
#include<bits/stdc++.h>
#define ll long long
using namespace std;

const ll MAXN = 2e5 + 10;
const ll MOD = 1e9 + 7;

ll N;
struct xd{
	int l, r;
}xs[MAXN];

ll qp(ll d, ll c){
	//cerr << d << " " << c << "\n";
	ll ans = 1;
	while(c){
		if(c & 1) ans = (ans * d) % MOD;
		d = (d * d) % MOD;
		c >>= 1;
	}
	return ans;
}

ll t[MAXN][3];
inline ll lowbit(ll x){return x & -x;}
inline void add(ll p, ll v, ll f){
	for(; p <= 2 * N; p += lowbit(p)) t[p][f] += v;
}
inline ll fin(ll p, ll f){
	if(p <= 0) return 0;
	ll sum = 0;
	for(; p; p -= lowbit(p)) sum += t[p][f];
	return sum;
}
inline ll fi(ll l, ll r, ll f){ return fin(r, f) - fin(l - 1, f);}

ll ans;

bool cmp(xd a, xd b){return a.l < b.l;}

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	
	cin >> N;
	for(int i = 1; i <= N; i++) cin >> xs[i].l >> xs[i].r;
	
	sort(xs + 1, xs + N + 1, cmp);
	
	for(int i = 1; i <= N; i++){
		ll n = fi(1, xs[i].l - 1, 1);
		//cerr << n << "\n";
		//cerr << n << " " << fi(1, l[i] - 1, 2) << " " << fi(r[i] + 1, 2 * N, 1) << "\n";
		ans = (ans * 2 + qp(2, n)) % MOD;
		add(xs[i].r, 1, 1);
	}
	
	cout << ans << "\n";
}
//end at 16:06

推题+代码将近一个小时, 还是太菜了

洛谷P6075 [JSOI2015] 子集选取

标签:专题,int,ll,复杂度,xs,计数问题,线段
From: https://www.cnblogs.com/wwzzhhone/p/17834105.html

相关文章

  • 【专题】2023食品行业营销数智化洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34250原文出处:拓端数据部落公众号近日,一份《2023食品行业营销数智化洞察报告合集》发布,该报告从多个角度对市场、行业、企业进行了数据分析,并预测了2023年营销走势及增长点。阅读原文,获取专题报告合集全文,解锁文末140份食品营销数智化相关行业研究......
  • 【专题】2023年中国汽车出海研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34260原文出处:拓端数据部落公众号近年来,我国汽车出口需求旺盛,并保持强劲增长趋势,至2023年一季度,汽车出口总量首超日本,中国汽车“破浪出海”正当时。本报告合集旨在通过梳理中国汽车的出海背景,分析汽车厂商出海的现状及特点,洞察中国汽车出海的风险......
  • 专题:分层图
    专题:分层图拖了整整一个月,我终于来学习分层图了,原因是考一道USACO的题正解死分层图,秉持着竟然有用,那我就来学学的原则,学习了分层图。纵然,这确实是个好东西,但是局限性也比较明显,分层图的分层的意思是把图整体复制几遍,跨层走意味着使用了一次特殊机会。但是,显然这对数据范围......
  • 卡特兰数专题(Catalan)
    卡特兰数专题(\(Catalan\))一、什么是卡特兰数?明安图数,又称卡塔兰数,英文名\(Catalan\)\(number\),是组合数学中一个常出现于各种计数问题中的数列。以中国蒙古族数学家明安图\((1692-1763)\)和比利时的数学家欧仁·查理·卡塔兰\((1814–1894)\)的名字来命名,其前几项为(从第零项......
  • 【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
    [NOIP2013普及组]计数问题题目描述试计算在区间到的所有整数中,数字()共出现了多少次?例如,在到中,即在中,数字出现了次。输入格式个整数,之间用一个空格隔开。输出格式个整数,表示出现的次数。样例#1样例输入#1111样例输出#14提示对于的数据,,。思路求每个数字的......
  • 【专题】2023智能汽车发展趋势洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34219原文出处:拓端数据部落公众号至2025年,智能网联汽车产业规模将突破5000亿。预计具备L2及以上自动驾驶能力的车型销量将突破千万级,渗透率将跃升至42.9%。阅读原文,获取专题报告合集全文,解锁文末56份智能汽车相关行业研究报告。智能汽车发展水平......
  • 【专题】2022-2023中国跨境出口B2C电商报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32805原文出处:拓端数据部落公众号全球疫情的爆发对于全球经济和消费市场都带来了很大的冲击,特别是在消费者的消费行为和零售市场格局方面发生了重大变革。同时由于全球供应链的重新调整,产业分化现象也加速出现。中国跨境电商已经历了十年以上的发......
  • 【专题】2023年中国白酒行业消费白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34188原文出处:拓端数据部落公众号2023年中国白酒行业消费白皮书报告合集,总结了消费市场的两大传承和五大进化,以帮助白酒企业更好地理解消费者心理和供需变化,从而把握增长机会。两大传承包括争夺消费者的“第一口酒”以及品牌在消费决策中的关键作......
  • 【专题】2022年中国制造业数字化转型研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32145本文中所说的制造业数字化转型,指的是在制造企业的设计、生产、管理、销售及服务的每一个环节中,将新一代信息技术应用到制造企业的设计、生产、管理、销售及服务的每一个环节中,并可以以每一个环节中产生的数据为基础,展开控制、监测、检测、预测......
  • 【专题】中国服务机器人产业研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34144原文出处:拓端数据部落公众号仿生机器人作为一类结合了仿生学原理的机器人,具备自主决策和规划行动的能力,正逐渐进入大众视野。它们的核心技术要素包括感知与认知技术、运动与控制技术、人机交互技术和自主决策技术。阅读原文,获取专题报告合集......