【NOI2018模拟3.31】华胥梦天

ISE 14.7 MCS文件的生成--- Spartan3AN XC3S200AN 步骤一: Generate Programming File生成 .bit文件 步骤二: Tools——>iMPCAT 步骤三: iMPACT Flows——>双击“Create PROM File(PROM File Formatter)” 步骤四: Non-Volatile FPGA——>点击”Spartan 3AN“——>点击“绿色箭头”——>Spartan3AN(bits)——>选择“xc3s200an"——>点击”Add storage Device“— 阅读详情

Description:

这里写图片描述
1<=n<=500000

题解:

这题是吉利营员交流的一个子问题。

线段树维护几个东西:
1.和
2.最大值
3.严格次大值
4.最大值个数
5.min标记

可以用势能分析来分析复杂度。

考虑势能为线段树每个节点所代表区间的不同数的个数和。

一次修改只会增加log个。

对于区间取min,假设取x的min。

x>=max,显然不管。

cmax>x>max,可以直接算答案。

x<<cmax,就需要递归下去。

当x<<cmax时,递归下去势能至少减1。

所以复杂度不会超过O(n log n),常数有点大。

要加读入输出优化。

希望之后搞懂其它的子问题。

Code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
using namespace std;

const int N = 500005;
const ll INF = 1e18;

int n, m, l, r, x, y, num;
ll ans, px;
int pl, pr;
struct node {
    int mx, cx, ms;
    ll s, bz;
} t[N * 4];

void bin(int i) {
    int u = i + i, v = u + 1;
    if(t[u].mx < t[v].mx) swap(u, v);
    if(t[u].mx == t[v].mx) {
        t[i].mx = t[u].mx; t[i].ms = t[u].ms + t[v].ms;
        t[i].cx = max(t[u].cx, t[v].cx);
    } else {
        t[i].mx = t[u].mx; t[i].ms = t[u].ms;
        t[i].cx = max(t[u].cx, t[v].mx);
    }
    t[i].s = t[u].s + t[v].s; t[i].bz = INF;
}

void dg(int i, int x, int y) {
    if(t[i].bz >= t[i].mx) return;
    if(x == y) {
        t[i].mx = t[i].s = t[i].bz;
        t[i].cx = 0; t[i].ms = 1;
        t[i].bz = INF;
        return;
    }
    if(t[i].bz > t[i].cx) {
        t[i].s = (ll) (t[i].bz - t[i].mx) * t[i].ms + t[i].s;
        t[i].mx = t[i].bz;
        return;
    }
    int m = x + y >> 1;
    t[i + i].bz = min(t[i + i].bz, t[i].bz); dg(i + i, x, m);
    t[i + i + 1].bz = min(t[i + i + 1].bz, t[i].bz); dg(i + i + 1, m + 1, y);
    bin(i);
}

void add(int i, int x, int y) {
    if(y < pl || x > pr) return;
    if(x == y) {
        t[i].bz = INF; t[i].mx = max(0, t[i].mx - px);
        t[i].ms = 1; t[i].s = t[i].mx;
        return;
    }
    int m = x + y >> 1;
    t[i + i].bz = min(t[i + i].bz, t[i].bz); dg(i + i, x, m);
    t[i + i + 1].bz = min(t[i + i + 1].bz, t[i].bz); dg(i + i + 1, m + 1, y);
    add(i + i, x, m); add(i + i + 1, m + 1, y);
    bin(i);
}

void ad(int i, int x, int y) {
    if(y < pl || x > pr) return;
    if(x >= pl && y <= pr) {
        t[i].bz = min(t[i].bz, px); dg(i, x, y);
        return;
    }
    int m = x + y >> 1;
    t[i + i].bz = min(t[i + i].bz, t[i].bz); dg(i + i, x, m);
    t[i + i + 1].bz = min(t[i + i + 1].bz, t[i].bz); dg(i + i + 1, m + 1, y);
    ad(i + i, x, m); ad(i + i + 1, m + 1, y);
    bin(i);
}

void fi(int i, int x, int y) {
    if(y < pl || x > pr) return;
    if(x >= pl && y <= pr) {
        ans += t[i].s; return;
    }
    int m = x + y >> 1; 
    t[i + i].bz = min(t[i + i].bz, t[i].bz); dg(i + i, x, m);
    t[i + i + 1].bz = min(t[i + i + 1].bz, t[i].bz); dg(i + i + 1, m + 1, y);
    fi(i + i, x, m); fi(i + i + 1, m + 1, y);
    bin(i);
}

void read(int &x) {
    char c = ' ';
    for(; c < '0' || c > '9'; c = getchar());
    x = 0; for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
}

void write(int x) {
    if(x == 0) {
        putchar('0'); putchar('\n');
        return;
    }
    int d[20]; d[0] = 0;
    while(x) d[++ d[0]] = x % 10, x /= 10;
    while(d[0]) putchar(d[d[0] --] + 48);
    putchar('\n');
}
int main() {
    freopen("dream.in", "r", stdin);
    freopen("dream.out", "w", stdout);
    scanf("%d %d", &n, &m);
    fo(i, 1, n * 4) t[i].bz = INF;
    fo(i, 1, n) {
        read(x);
        pl = pr = i; px = -x;
        add(1, 1, n);
    }
    fo(i, 1, m) {
        read(num);
        if(num == 1) {
            read(x); read(y);
            x ^= ans; y ^= ans;
            px = y; pl = pr = x;
            add(1, 1, n);
        } else
        if(num == 2) {
            read(l); read(r); read(x);
            l ^= ans; r ^= ans; x ^= ans;
            pl = l, pr = r; px = x;
            ad(1, 1, n);
        } else {
            read(l); read(r);
            l ^= ans; r ^= ans;
            pl = l, pr = r, ans = 0;
            fi(1, 1, n);
            printf("%lld\n", ans);
        }
    }
}
1 四种防反接电路——multisim仿真 摘要:防反接电路可防止电源反接损坏器件,主要有四种方案:1)二极管串联(低成本,适用小电流);2)整流桥(无极性输入,但效率低);3)保险丝+稳压管(低损耗但需更换);4)MOS管方案(大电流、高效率,主流选择)。选型需考虑电流、压降和成本,MOS管因其低导通电阻(毫欧级)成为大电流应用的首选。口诀:"小电流二极管,大电流用MOS"可快速指导设计。 阅读详情

相关推荐

H3C设备VRF配置实战:5步搞定多业务网络隔离(附排错技巧)

本文详细介绍了在H3C设备上配置VRF(虚拟路由转发)实现多业务网络隔离的实战方法。通过五步配置流程,从创建VPN-instance、绑定接口到配置独立路由表,帮助网络工程师在单台设备上构建逻辑隔离的企业级网络,并分享了高级路由配置与常见排错技巧。

gold8的专栏 938

双非一战上岸北邮网安,我的408专业课复习时间线(附王道套餐使用心得)

本文分享了双非考生一战上岸北邮网安的408专业课备考经验,详细介绍了从零基础到真题精通的系统化复习路径。通过模块化拆解和错题驱动法,作者成功攻克了数据结构、计算机组成、操作系统和计算机网络四门课程,最终取得120+的高分。文章特别强调了王道套餐的高效使用技巧和三轮复习法的实战改良,为跨考网安的考生提供了宝贵参考。

weixin_30709061的博客 442

CANFD升级踩坑实录:DBC转换时DLC大于8的信号怎么处理?

本文详细探讨了CANFD升级过程中DLC大于8的信号处理问题,提供了工程化解决方案和AutoSar BSW层配置要点。通过分析CAN与CANFD的DLC本质差异,提出信号拆分重组、DLC重映射和协议层适配三种策略,并给出验证与测试方案,帮助开发者避免数据截断和通信故障。

weixin_42521843的博客 230

LIGHTOJ 1383 Underwater Snipers 二分好题+贪心区间覆盖

题目链接:http://lightoj.com/volume_showproblem.php?problem=1383 1383 - Underwater Snipers PDF (English) Statistics Forum Time Limit: 4 second(s) Memory Limit: 32

774

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

zstuAcm夏令营旗手

题目描述 一年一度的江苏省“信息与未来”小学生夏令营活动又开始了。与每年一样,组织者又设计安排了许多有趣的活动,其中第一项依然是挑选本次夏令营的旗手!由于这是一个非常具有荣誉感的角色,所以报名参加夏令营旗手角逐的营员仍然非常多,营委会于是规定:将N个人排成一排,编号1~N。从第1人开始进行1~M正向报数,报到M的人出列,再从下一个人开始继续1到M报数、出列。(注意:按某个方向报数报到尾部时,再反方向继续报数)。如此进行下去,直到剩下一人为止,这个人就是本次夏令营的旗手。小明非常渇望能成为旗手,你能编一个程序

qq_42677487的博客 2070

2023-2024深度学习框架之争——选pytorch还是tensorflow?

深度学习是人工智能领域的一个重要分支,它利用多层神经网络来模拟人类的学习和推理能力,解决各种复杂的问题,如图像识别、自然语言处理、语音识别、推荐系统等。深度学习框架是一种软件工具,它提供了构建、训练、测试和部署深度学习模型的便利,使得开发者和研究者可以更高效地进行深度学习的开发和应用。目前,市场上有许多不同的深度学习框架,如PyTorch、TensorFlow、Keras、MXNet、Caffe2等,它们各有优劣,适用于不同的场景和需求。

flchen_nchu的博客 6756

POJ 2157 Maze

Maze Time Limit:2000MS Memory Limit:65536K Total Submissions:3183 Accepted:996 Description Acm, a treasure-explorer, is exploring again. This time he is in a specia...

weixin_30588907的博客 214

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 690

Selenium|通过更改亚马逊amazon的配送地获取当地的cookie

如果我们需要拿到国外配送地的商品信息,这个时候就需要用到selenium或者pypputeer自动化的方法去更改配送地,拿到当地的cookie信息,之后,携带当地的cookie使用requests发送请求,就可以拿到国外配送地的商品数据信息。一般来说,我们访问亚马逊,亚马逊的配送地一般显示的是国内,但是国内的商品信息和国外的商品信息其实是存在很大差别的,比如你在搜索框输入某个关键词,看到的

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 994

[JZOJ5618]【NOI2018模拟3.31】华胥梦天

DescriptionN个数的序列A 要求支持区间对一个数取min,单点做减法且对0取max,区间求和 N≤500000,Ai≤109N\leq500000,A_i\leq10^9Solution经典套路题啊(参见吉老师的SegmentTree-Beats)之前CTY讲课的时候还跟他谈笑风生来着说这不是大暴力么 结果过没多久就忘了qwq直接用线段树维护区间最大值、最大值有多少个和区间次大值

Never give in. 287

Python爬虫实战:使用Scrapy+Playwright高效爬取全球专利数据库

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建一个高效的专利数据库爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、分布式爬虫架构以及数据存储方案,最终实现一个完整的专利数据采集系统。专利数据是技术创新领域的重要信息资源,包含技术描述、权利要求、申请人信息等宝贵数据。中国国家知识产权局(CNIPA)美国专利商标局(USPTO)欧洲专利局(EPO)世界知识产权组织(WIPO)

2201_76125261的博客 1384

JZOJ 5618. 【NOI2018模拟3.31】华胥梦天

JZOJ 5618. 【NOI2018模拟3.31】华胥梦天 DescriptionInputOutputData ConstraintSolution 吉如一论文里的线段树算法…… 对于一个区间,记录三个值:最大值 mx1mx1,最大值的个数 cntcnt,严格次大值 mx2mx2。 那么在一个区间内要修改为 xx , 如果有 x≥mx1x\ge mx1 ,就不用修改,直接退出。

Felix-Lee的博客 277

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JZOJ5618. 【NOI2018模拟3.31】华胥梦天

题意 数据范围 Analysis 区间取minminmin的模板题,于是上吉司机线段树。所谓吉司机线段树,是指复杂度分析基于势能分析乱搞得出,表面暴力实则玄学的可维护区间取min,maxmin,maxmin,max的线段树。 线段树上考虑维护几个值:最大值mxmxmx,最大值个数cntcntcnt,严格次大值cmxcmxcmx,区间和sumsumsum。 其它操作都不是问题,考虑...

XLno_name的博客 265

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NOIP2017 Day2_T3 列队

题目大意:众人皆知。题解:考场时打SBT打傻了,被卡爆了。这就是个傻逼线段树能过的东西,不要问我问为什么能跑这么快?每一行用线段树维护前m-1个。最后一列独立开来。查询用线段树二分。可以直接预开6e5。完。Code:#include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define fo(i, x,

Cold_Chair的博客 1425

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

小喵喵的新家

JZOJ3441 小喵喵的新家Description小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 。如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家。小喵喵天生多才多艺,对多种乐器颇有研究。对于生活中常见的图形,她对圆形很感兴趣,因此小聪聪决定为她建一个圆形的新家。我们设新家在一个平面直角坐标系上,其中新家的圆心为平面直角坐标系的原点。小聪聪有一把神奇的剪刀,他定义了一个值m,以等分

Cold_Chair的博客 1353

GDKOI 2016 魔卡少女

GDKOI2016 魔卡少女 Description 君君是中山大学的四年级学生。有一天在家不小心开启了放置在爸爸书房中的一本古书。于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地。这时一只看上去四不像的可爱生物“封印之兽”可鲁贝洛斯从书中钻了出来,它告诉君君书中的牌叫“库洛牌”,现在散落各地已实体化,要君君将它们全部再次封印起来,以免危害世界

Cold_Chair的博客 1207

【NOI2014模拟】数列

Description:给定一个长度为n的正整数数列a[i]。定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|。你需要写一个程序支持2种操作(k都是正整数):Modify x k:将第x个数的值修改为k。Query x k:询问有几个i满足f(x,i)<=k。询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的

Cold_Chair的博客 1188

【NOI2018】你的名字

题目大意: 一开始给出字符串S。 Q次询问,每次给出l,r和字符串T。 问T有多少不同子串不是S[l…r]的子串。 ∑∣T∣&amp;lt;=1e6,∣S∣,∣T∣&amp;lt;=5e5\sum|T|&amp;lt;=1e6,|S|,|T|&amp;lt;=5e5∑∣T∣&lt;=1e6,∣S∣,∣T∣&lt;=5e5 题解: 不同子串一类问题优先考虑SAM。 感觉这题考的更多是对SAM的理解。...

Cold_Chair的博客 1083

线段树合并——hdu 5709 Claris Loves Painting

前言: 清冬上不会线段树合并又没想到启发式合并亏了50+…… 题目大意: 题目链接. 给出一个一棵以1为根的树。 每个点有一个颜色。 每次询问给出x,d,为以x为根的子树中,到x距离小于等于d的点有多少种不同的颜色。 题解: 感觉这题还是个线段树合并的裸题吧(也没有这么裸)。 先谈谈自己对线段树合并的感受。 线段树应该都得是动态开点的线段树,不然合并不就是O(n)的吗? 给出

Cold_Chair的博客 866

【NOIP2017提高A组模拟7.13】好数

题目大意:我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1.这个数是0或1 2.所有小于这个数且与它互质的正整数可以排成一个等差数列例如,8就是一个好数,因为1,3,5,7排成了等差数列。 给出N个非负整数,然后进行如下三个操作: 1.询问区间[L,R]有多少个好数 2.将区间[L,R]内所有数对S取余(S≤1000000) 3.将第C个数更改为X 题解:首先我们打个表

Cold_Chair的博客 862

JZOJ 100019【NOI2017模拟6.26】A

题目大意: 1<=n<=10^5题解:假设有两点u,v其中v = i *u(2<=i<=n/u) 如果有一路径a,b经过了它们两,那么a,b就是不合法的路径。我们可以尝试找出这样的路径。先求出树的dfs序,设为dfn[x] end[x]为x的子树中最大的dfn[x’]使dfn[u] < dfn[v]:1.u是v的祖先:设g为u到v的路径中距离u最近的那个点。 则跨过u,v的路径a,b(dfn

Cold_Chair的博客 809

【NOIP2013模拟联考7】最长上升子序列

Description:维护一个序列,使它可以进行下面两种操作: 1.在末尾添加一个数字x 2.将整个序列变成第x次操作后的样子 在每次操作后,输出当前序列的最长上升子序列的长度 序列初始时为空. n<=500000且所有输入的数字都是长整型范围内的非负整数题解:显然可以离散一下数字直接套用可持久化线段树,区间查询,单点修改。 也可以设fif_i表示长度为i的最小结尾,接着强行可持久化线

Cold_Chair的博客 744

【WinterCamp 2013】楼房重建 && 【NOIP2017提高A组模拟10.8】God Knows

感谢czy的题解。这两题是类似的。转换以后都是这样的: 有一个序列a[1..n],每次询问对a[i-j]之间的元素做一个(递增或递减)单调栈,求单调栈里有多少个元素,或者是还有b[1..n],求做了单调栈以后,单调栈里的元素对应的b的极值。 有修改,为单点修改。做法其实本质是利用线段树的分治思想。假设建的是递减的单调栈,求单调栈里元素的个数。设query(l,r,p)表示在a[l..r]所形成的

Cold_Chair的博客 737

JZOJ 100036 【NOIP2017提高A组模拟7.10】随机

题目大意: 1<=n<=10610^6题解:Ans=min(max(|ai−aj|,j−i+1))Ans = min(max(|a_i - a_j|, j - i + 1)) 假设我们现在的区间长度是m,最小值是min,将右端点右移,m++,min将可能会减小。 我们确定一个左端点l,假设右端点是r,那么一定当r位于m>=min的临界点上max(m, min)菜会最小。 证明:假设现在在临界

Cold_Chair的博客 733
上一篇: 【CF261D】Maxim and Increasing Subsequence
下一篇: Tarjan的各种操作
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值