首页 > 其他分享 >Hello 2024C. Grouping Increases(贪心)

Hello 2024C. Grouping Increases(贪心)

时间:2024-02-04 15:56:21浏览次数:20  
标签:结尾 int rep long Increases 序列 2024C Hello define

我们只需要记录每个数结尾的数是多少(有点最长上升子序列的味道)
这种子序列的题目很多都是这样的,因为不需要连续很多时候我们只记录最后一个元素是多少。
\(记s为较大子序列结尾当前的数,t为较小子序列结尾的数,下面分类讨论\)

  1. \(当a[i]<=t<s时\)我们将a[i]既可以放进t所在的子序列,也可以放在s所在的子序列,都不会对答案产生贡献,我们考虑放在哪个子序列可以让答案更有,显然a[i]与t的距离更近,如果我们放进s,那么如果后面出现[t,s]之间的数我们都会对答案产生贡献,如果我们放进t,后面出现[t,s]之间的数不会对答案产生贡献。所以这种情况我们把a[i]放进t所在的子序列并维护s,t。
  2. \(t<a[i]=<s时\)这时为了不使答案增加我们把a[i]放进s,维护s、t
  3. \(t<s<a[i]时\)这时无论放进t还是s都会对答案产生贡献,但是我们考虑具体放进哪个,显然放进t(更小的)是更优的,维护s、t
#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;
void solve()
{
	int n;cin>>n;
	vector<int>a(n+1);
	rep(i,1,n)	cin>>a[i];
	int s=1e9,t=1e9,ans=0;
	rep(i,1,n)
	{
		if(s<t)swap(s,t);
		if(a[i]>s)	
		{
			ans++;
			t=a[i];
		}
		if(a[i]<=t)	t=a[i];
		else	s=a[i];
	}
	cout<<ans<<endl;
}
signed main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

标签:结尾,int,rep,long,Increases,序列,2024C,Hello,define
From: https://www.cnblogs.com/cxy8/p/18006372

相关文章

  • helloShell
    初识SHELL变量常规的变量赋值不必多说,shell脚本还可以从命令输出中提取信息,赋值给变量反引号字符testing=`date`$()格式testing=$(date)#!/bin/bashtoday=$(date+%y%m%d)ls/usr/bin-al>log.$today#目录将输出到log.240204中数学运算使用方括号比expr更......
  • WASM_WebAssembly简单运行-hello,world
    WASMWASM可以被JavaScript调用,进入JavaScript上下文Wasm,即WebAssembly,是一种用来补充JS在运行上不足的“低级”语言——基于二进制编写-是一种新的字节码格式允许用户采用自己熟悉的语言书写(目前支持C/C++/Rust),再在虚拟机引擎在浏览器上运行。 它支持沙盒......
  • 来了!HelloGitHub 年度热门开源项目
    年关将至,「HelloGitHub月刊」也迎来了年终盘点时刻。在过去的一年里,「HelloGitHub月刊」一共分享了520个开源项目。我始终秉持着分享GitHub上有趣、入门级开源项目的初心,一直在路上,不断探索、发现和分享着那些令人惊叹的开源项目。这次的HelloGitHub年度盘点,为了满足不......
  • Day 02.Hello world
    Helloworld新建文件夹,用于存放代码新建一个java文件,文件后缀.java编写代码publicclassHello{publicstaticvoidmain(String[]args)[System.out.print("Hello,world!");]}转译javac文件运行class文件![image-20240203134956868](/Users/zewei/Librar......
  • HelloWorld详解
    HelloWorld新建文件夹,存放代码新建一个Java文件文件后缀名为.java(Hello.java)系统可能没有显示文件名后缀,需手动打开编写代码publicclassHello{publicstaticviodmain(String[]args){System.out.print("Hello,World!");}}编译javacja......
  • 跑通的第一个ethers.js程序HelloVitalik.js
    简介ethers.js是一个本地库,可以让你调用接口,用官方写好的轮子来使用一些常用的函数!学习完这个库,你对node.js就有比较深入的了解了,如果你不做项目,就不涉及智能合约的编写,那么写点脚本学习一下ethers.js是很好的。教程已经有比较完整系统的了:https://www.wtf.academy/ethers-101/H......
  • CF1919 C. Grouping Increases
    给定一个长为\(n\)的序列\(a\),你需要将该序列恰好分成两个子序列\(s,t\)。定义一个长为\(m\)的序列\(b\)的代价为\(\displaystylep(b)=\sum_{i=1}^{m-1}[b_i<b_{i+1}]\),求\(p(s)+p(t)\)的最小值。每个测试点\(t\)组测试用例。思路贪心。可以发现答案的贡献只与......
  • HelloWorld
    随便新建一个文件夹,存放代码新建一个java文件文件后缀名为:.javaHello.java【注意点】系统可能没有显示文件后缀名,我们需要手动打开3.编写代码publicclassHello{ publicstaticvoidmain(String[]args){ System.out.print("Hello,World!"); }}编译javacjav......
  • Day03-Helloworld-IDEA
    Helloworld1.新建一个文件夹,用于存放代码。2.新建后缀名为java的文件。​文件命名组成是:Hello.java​文件打开方式为notepad++3.编写代码:publicclassHello{ publicstaticvoidmain(String[]args){ System.out.print("Hello,World!"); }}4.编译:把写的......
  • 第一个hello驱动
    Linux驱动程序的分类字符设备驱动、块设备驱动和网络设备驱动。Linux驱动程序运行方式把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了;把驱动程序编译成以.ko为后缀的模块文件,然后在Linux启动后,我们自己手动安装驱动程序。驱动程序#include<linux/modul......