首页 > 其他分享 >基础

基础

时间:2023-03-19 10:12:08浏览次数:27  
标签:typedef return 基础 smn freopen tmn cT

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡吧睡

Code

#include <bits/stdc++.h>
namespace // to fold that junk code
{
#define filein(x) freopen(x".in", "r", stdin);
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout);
#define files(x) freopen(x".in", "r", stdin), freopen(x".ans", "w", stdout);
using namespace std;
#define cT const T&
template<typename T>
inline T chkmin(T& x, cT y){if (x > y) x = y; return x;}
template<typename T>
inline T chkmax(T& x, cT y){if (x < y) x = y; return x;}
template <typename T>
inline bool inrange(cT x, cT l, cT r){return (l <= x) && (x <= r);}
template <typename T>
inline bool inrange(cT l, cT r, cT L, cT R){return (L <= l) && (r <= R);}
#undef cT
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef unsigned u32;
template <typename T>
using pr = pair<T, T>;
typedef pr<int> pii;
typedef pr<ll> pll;
typedef pr<db> pdd;
typedef complex<double> cp;
typedef vector<int> vi;
inline void YN(bool x){puts(x ? "Yes" : "No");}
}
const int N = 3e5 + 233;
int n, a[N];
struct SegmentTree
{
#define ls (u << 1)
#define rs (u << 1 | 1)
#define mid ((l + r) >> 1)
	struct Node{int l, r, mn, cc, tag;}tr[N << 2];
	inline void pushup(int u){tr[u].mn = min(tr[ls].mn, tr[rs].mn); tr[u].cc = (tr[ls].mn == tr[u].mn) * tr[ls].cc + (tr[rs].mn == tr[u].mn) * tr[rs].cc;}
	inline void pushdown(int u)
	{
		if (!tr[u].tag) return ;
		tr[ls].mn += tr[u].tag; tr[rs].mn += tr[u].tag; tr[ls].tag += tr[u].tag; tr[rs].tag += tr[u].tag;
		tr[u].tag = 0;
	}
	void build(int u, int l, int r)
	{
		tr[u].l = l; tr[u].r = r; tr[u].cc = r - l + 1;
		if (l == r) return ;
		build(ls, l, mid); build(rs, mid+1, r);
	}
	void change(int u, int L, int R, int v)
	{
		int l = tr[u].l, r = tr[u].r;
		if (inrange(l, r, L, R)){tr[u].mn += v; tr[u].tag += v; return ;}
		pushdown(u);
		if (L <= mid) change(ls, L, R, v);
		if (mid < R) change(rs, L, R, v);
		pushup(u);

	}
#undef mid
#undef rs
#undef ls
}T;
int pos[N], smx[N], smn[N], tmx, tmn;
int main()
{
#ifndef ONLINE_JUDGE
	filein("i");
#endif
	scanf("%d", &n);
	for (int i=1, x, y; i<=n; i++){scanf("%d%d", &x, &y); a[x] = y;}
	T.build(1, 1, n);
	int ans = 0;
	for (int i=1; i<=n; i++)
	{
		while (tmx && (a[smx[tmx]] < a[i])){T.change(1, smx[tmx-1] + 1, smx[tmx], -a[smx[tmx]]); --tmx;}
		while (tmn && (a[smn[tmn]] > a[i])){T.change(1, smn[tmn-1] + 1, smn[tmn], a[smn[tmn]]); --tmn;}
		T.change(1, pos[a[i]] + 1, i, -1); pos[a[i]] = smx[++tmx] = smn[++tmn] = i;
		T.change(1, smx[tmx-1] + 1, i, a[i]); T.change(1, smn[tmn-1] + 1, i, -a[i]);
		ans += T.tr[1].cc;
	}
	printf("%d\n", ans);
	return 0;
}

标签:typedef,return,基础,smn,freopen,tmn,cT
From: https://www.cnblogs.com/CDOI-24374/p/17232532.html

相关文章

  • 「学习笔记」平衡树基础:Splay 和 Treap
    「学习笔记」平衡树基础:Splay和Treap点击查看目录目录「学习笔记」平衡树基础:Splay和Treap知识点平衡树概述Splay旋转操作Splay操作插入\(x\)查询排名为\(k\)......
  • 100道python基础题——(7)
    问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。注意:i=0,1..,X-1;j=0,1,­Y-1。例子假设程序有以下输入:......
  • Linux系统命令基础
    Linux命令格式命令条件/参数文件/目录cd命令,changedirectory变换目录.当前目录..上一层目录-前一个工作目录~当前【用户】所在的家目录/......
  • 基础加强
    基础加强1.1类加载器【理解】作用负责将.class文件(存储的物理文件)加载在到内存中1.2类加载的过程【理解】类加载时机创建类的实例(对象)调用类的类方法访问类......
  • Kubernetes学习之基础知识
    Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了许多功能,例如服务发现、负载均衡、自动伸缩、滚动更新等,使得运维人员可以轻松地......
  • Linux基础命令
    重启:poweroff   reboot关机:shutdown now Pwd:查看当前工作目录路径Sync:可用来强制将内存缓冲区中的数据立即写入磁盘中Su:用来切换用户身份 Ls: -a ......
  • 109数据分析基础一
    数据分析观测实验应用总结观测观察+测量观察采集数据:解析系统日志埋点获取新数据通过传感器采集(比如天气数据收集、心率血氧数据收集)爬虫API......
  • Java笔记(一):基础
    1.JDK和JRE的区别JDK(JavaDevelopmentKit)开发工具基本类库javac编译javap反编译javadoc运行环境JRE(JavaRuntimeEnvironment)3.Lambda表达式使......
  • Java面试系列:基础知识点
    一、List、Set、Collection的区别 二、ArrayList和LinkedList的区别 三、HashMap和HashTable的区别TRANSLATEwithxEnglishArabicHebrewPolish......
  • 滚柱导轨的基础清洁方法
    滚柱导轨,滚动导轨,木工导轨,机床导轨,滚珠导轨等导轨作为设备的核心部件之一,它的功用是起导向和支承作用。为了保证机器有较高的加工精度,要求其导轨具有较高的导向精度和良好的......