1041C 2019/2/8 数据结构set

本文分享了在C++算法竞赛中,如何通过优化代码结构和逻辑,提升算法效率的实战经验。重点介绍了二分查找、集合操作和迭代器使用的注意事项,避免常见的逻辑错误,实现更高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坑的一比,自己超级沙雕。

#include<iostream>
#include<algorithm>
#include<set>
#define ll int
using namespace std;
struct ss{
	ll x;
	ll index_;
}a[300050];
ll flag[300050];
set<ll> st;
ll n,m,d;
set<ll>::iterator it;
bool cmp(ss x,ss y)
{
	return(x.x<y.x);
}
void set_group(ll num,ll group)
{
	ll left=0;
	ll right=n-1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (a[mid].x >= num) {
            right = mid - 1;
        }
        else {
            left = mid + 1;
        }
	}
	flag[a[left].index_]=group;
	return;
}
int main()
{
//	freopen("data.in","r",stdin);
    ios::sync_with_stdio(false);
	cin>>n>>m>>d;
	for(ll i=0;i<n;i++)
	{
		cin>>a[i].x;
		a[i].index_=i;
		st.insert(a[i].x);
	}
	sort(a,a+n,cmp);
	ll group=0;
	while(!st.empty())
	{
		group++;
		it=st.begin();
		ll num=*it;
		set_group(num,group);
		st.erase(it);
		num+=d+1;
		while(!st.empty()&&st.lower_bound(num)!=st.end())
		{
			it=st.lower_bound(num);
			set_group(*it,group);
			num=*it+d+1;
			st.erase(it);
			//cout<<num<<endl;
		}
	}
	cout<<group<<endl;
	for(ll i=0;i<n;i++)
		if(i!=n-1) cout<<flag[i]<<" ";else cout<<flag[i]<<endl;
	return 0;
}
    num=*it+d+1;
    st.erase(it);

    st.erase(it);
    num=*it+d+1;

注意这两者的区别:先删除,后使用,先使用后删除,这个很致命。

还在为数据库管理、代码开发和系统优化的繁杂任务焦头烂额?这款软件就是你翘首以盼的 “开发界瑞士军刀”,全方位赋能,让开发工作事半功倍! 1.数据库深度管理,掌控全局 当数据库遭遇死锁,它能快速定位并提供详尽死锁信息,助你秒解危机;实时监控数据库链接状态、用户情况、端口号等,就像给数据库安装了 “健康监测仪”。从设置最大连接数、把控连接超时,到获取服务器 CPU、磁盘等硬件信息,再到内存、缓存、数据库大小的精细化管理,无论是基础查看,还是清理、收缩、优化等操作,都能轻松完成,让数据库时刻保持最佳性能状态。 2.代码开发神器,效率飙升 无需从零开始编写代码,无论是 netframework 经典三层架构,还是 netcore 的经典代码,甚至是高并发 api 接口代码,都能一键自动生成,大幅缩短开发周期。针对 SQL,它提供耗时优化策略,精准定位低效代码,还能保障事务安全回滚,避免数据错误。json 格式化、数据库连接字符串强优化,每一个细节都为提升开发效率而设计。 3.全栈优化专家,性能拉满 不仅专注后端,对 web 前端也能进行 css、js、html 压缩优化,减小页面加载压力,提升用户体验;在服务器端,深入研究安全防护,优化应用程序与缓存,构建牢不可破的安全防线。同时,它还是版权保护卫士,从图片到代码,为你的创意成果保驾护航,杜绝侵权风险。 4.智能解析,便捷高效 面对二维码、条形码,轻松实现解析,助力开发更多实用功能,满足多样化业务需求。 开发之路道阻且长,但有了这款软件,复杂难题迎刃而解,高效开发触手可及!快来体验,开启你的开发新纪元,让每一行代码都都迸发无限可能!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值