首页 > 其他分享 >A1. Oh Sweet Beaverette

A1. Oh Sweet Beaverette

时间:2024-03-26 22:46:06浏览次数:15  
标签:end lstpos Sweet ll lst Beaverette A1 second include

https://codeforces.com/contest/331/problem/A1

关键点:
前缀和,记录每个负数的位置,以及变式前缀和(只记录正数)

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>

using namespace std;
typedef long long ll;



ll lst[300010];//所有的前缀和
ll lstpos[300010];//只记录正数的前缀和
struct pai
{
	ll start, end;//起始端点,结束端点:[start,end]
	pai() { start = -1; end = -1; }
};
int main()
{
	ll n; cin >> n;
	map<ll, pai>mp;//ll指的是这个数,单纯的这个数
	queue<ll>negid;//负数的id,后面输出用
	memset(lst, 0, sizeof(lst));
	for (ll i = 1; i <= n; i++)
	{
		
		cin >> lst[i];
		ll tem = lst[i];//后面处理用
		bool fa = false;//同上
		if (mp[lst[i]].start == -1)mp[lst[i]].start = i;//没有起始,这是第一个
		else if(mp[lst[i]].end == -1) mp[lst[i]].end = i;//有起始没有终止,无条件添加为end
		else//都有就需要比较,如果后一段的和小于等于零,不修改;如果后一段大于0,修改end = i,这里先记录fa,因为lstpos尚未更新,不能直接处理
		{
			fa = true;
			
		}
		lstpos[i] = lst[i];
		if (lstpos[i] < 0) { lstpos[i] = lstpos[i - 1]; negid.push(i); }
		else lstpos[i] += lstpos[i - 1];
		lst[i] += lst[i - 1];
		if (fa)//对应fa那段的处理
		{
			ll jud = lstpos[i] - lstpos[mp[tem].end - 1] + min((ll)0, tem);
			if (jud > 0)
			{
				mp[tem].end = i;
			}
		}
	}
	ll ans = LLONG_MIN;
	map<ll, pai>::iterator it = mp.begin();//预备遍历map
	ll k = 0;
	ll lef = 0, righ = 0;
	while (it != mp.end())
	{
		if (it->second.end != -1 and it->first < 0)//记住这个怎么用
		{
			if (ans < lstpos[it->second.end] - lstpos[it->second.start - 1] + 2 * it->first)//当是个负数,首先要用lstpos的前缀和,然后别忘了加上两端的负数
			{
				ans =  lstpos[it->second.end] - lstpos[it->second.start - 1] + 2 * it->first;
				lef = it->second.start, righ = it->second.end;

			}
		}
		else if (it->second.end != -1 and it->first >= 0)
		{
			if (ans < lstpos[it->second.end] - lstpos[it->second.start - 1])//这个就正常用lstpos就行
			{
				ans = lstpos[it->second.end] - lstpos[it->second.start - 1];
				lef = it->second.start, righ = it->second.end;
			}
		}
		it++;
	}

	cout << ans << ' ' ;
	ll num = lef - 1 + n - righ;//num构成:前+中(negid)+后
	queue<ll>outa;
	while (!negid.empty() and negid.front() <= lef)negid.pop();//弹掉太超前的
	while (!negid.empty() and negid.front() < righ)//压到队列中,预备输出
	{
		outa.push( negid.front()) ;
		negid.pop();
		num++;
	}
	cout << num << endl;//这是完整的num
	for (int i = 1; i < lef; i++)//前
	{
		cout << i << ' ';
	}
	while (!outa.empty())//中
	{
		cout << outa.front() << ' ';
		outa.pop();
	}
	for (int i = righ + 1; i <= n; i++)cout << i << ' ';//后
	return 0;
}

略有成就感的一题,有趣○( ^皿^)っHahaha…
小细节可以debug出来

标签:end,lstpos,Sweet,ll,lst,Beaverette,A1,second,include
From: https://www.cnblogs.com/zzzsacmblog/p/18097807

相关文章

  • ajax 结合sweetalert实现二次确认效果,ajax批量插入数据:bulk_create()
    ajax结合sweetalert实现二次确认二次确认效果:http://lipis.github.io/bootstrap-sweetalert/<body><divclass="container-fluid"><h1class="text-center">数据展示</h1><divclass="row"><divclass=......
  • 【视觉语言大模型+LLaVA1.0】大语言模型视觉助手(视觉指令调优)GPT4-Vision丐版
    官方资源汇总:项目主页||https://huggingface.co/liuhaotian23.04.LLaVA1.论文:LargeLanguageandVisionAssistant(VisualInstructionTuning)23.10LLaVA-1.5论文:ImprovedBaselineswithVisualInstructionTuning23.11LLaVA-Plus项目:LLaVA-Plus:LargeLang......
  • 【大语言视觉助手+LLaVA1.5】23.10.LLaVA-1.5改善后视觉语言大模型: Improved Baselin
    LLaVa家族官方资源汇总:项目主页||https://huggingface.co/liuhaotian23.04.LLaVA1.0论文:LargeLanguageandVisionAssistant(VisualInstructionTuning)23.06LLaVA-Med(医学图片视觉助手):TrainingaLargeLanguage-and-VisionAssistantforBiomedicineinOne......
  • 汽车用GMR角度传感器,TLE5014P16DXUMA1、TLE5014S16DXUMA1、TLE5014SP16DE0002XUMA1(360
    TLE5014GMR角度传感器有以下型号可供选择:TLE5014C16:汽车用GMR角度传感器,带SPC接口TLE5014P16:汽车用GMR角度传感器,带PWM接口TLE5014S16:汽车用GMR角度传感器,带SENT接口概述TLE5014基于巨磁阻(GMR)的角度传感器侧重于转向角传感器,设计用于汽车应用的角度位置检测。这些传感......
  • 2024年03月 Discourse 3.3.0.beta1 版本的更新
    在这个版本的更新中Discourse完成了Ember5版本的升级和更新。Ember.js是一个用于创建web应用的开源JavaScriptMVC框架,采用基于字符串的Handlebars模板,支持双向绑定、观察者模式、计算属性(依赖其他属性动态变化)、自动更新模板、路由控制、状态机等。Ember是一个雄心勃......
  • CMA180罗德与施瓦茨CMA180无线测试仪
    罗德与施瓦茨CMA180无线电测试仪频率从100千兆赫到3千兆赫不等模拟调制和解调(ccm、AM、FM)高达150瓦峰值输入功率和高达100瓦连续输入功率接收器测量信号级别可降至-140分贝集成音频发电机音频质量测试(SIND、TD、SRR)集成扫谱分析仪、跟踪发生器和范围使用不需要配置......
  • AWR1243+DCA1000——原始数据中部分chirp采样数据为0
    问题:mmWaveStudio中设置2发4收,帧周期10ms,帧数200,帧中Chirp数为1,ADC采样数512。发现采集的bin文件大小正确,但是部分chirp采样数据为零!解决:尝试加大帧周期;减少采样点;降低dca1000evm里的网络delay参考:[https://e2echina.ti.com/support/sensors/f/sensors-forum/785057/dca1000evm......
  • 【题解】A18535.来自领导的烦恼
    题目跳转思路:本题可以使用动态规划或递归的方式来实现,本质上是一道01背包的变型题。假设一共有\(n\)名员工,每一位员工的技能水平用\(a[i]\)表示。要使得两个部门的员工技能总和之差最小,意思就是尽可能地将一个部门的技能之和”凑“到\(\sum\limits_{i=1}^{n}a[i]\times\frac{1}......
  • 【题解】A18536.星光交错的律动
    题目跳转思路:这道题可能跟博弈论有一点关系,没有学习过博弈论做起来应该问题也不大。思考一个问题,先手必胜的前提是什么?有关更多的内容可以前往:浅谈有向无环图先手必胜的前提是,在任何一种局面下,先手都有至少一种操作可以使后手处于必败的局面。若先手进行任何操作后,后手都可以......
  • 【题解】A18537.我心中珍藏的游戏
    题目跳转思路:题目问最多可以获得的额外伤害,其实就是询问在这些技能中,如何怎样选取一个最优的发动技能顺序使得攻击加成最大。我们可以把每一个技能看作成一个图的顶点,把每一个攻击加成看作图的边,权制为\(Ei,j\)。由于\(Ei,j\)与\(Ej,i\)相等,则可以将这个图视为无向图。可以样样......