最好的宝石(上推线段树)

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南 本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。 阅读详情

最好的宝石

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述 

牛牛有n个宝石,第i个宝石的价值是w[i]. 

有m个操作,操作分为两种类型 

− Change   x  y   把第x个宝石的价值改成 y  

− Ask          l   r   询问区间[l,r]内宝石的最大价值,和最大价值的宝石有多少个。 

输入描述:

 

第一行两个整数 n , m (1 ≤ n,m ≤ 2e5)

第二行有n个整数 w[i]  (0 ≤ w[i] ≤ 1e9)

接下来m行,每行代表一个操作。具体见题目描述。

输出描述:

每次询问输出一行,每行两个整数 val  cnt,val代表所有宝石中的最大价值,cnt代表价值最大的宝石有多少个。

示例1

输入

复制

5 3
2 4 3 6 8
Ask 1 5
Change 2 10
Ask 1 3

输出

复制

8 1
10 1
/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
typedef long long  ll;
#define ull unsigned long long
#define scf(n) scanf("%d",&n)
#define scfl(n) scanf("%lld",&n)
#define prf(n) printf("%d",n)
#define prfl(n) printf("%lld",n)
#define scfd(n) scanf("%lf",&n)
#define prfd(n) printf("%.lf",n)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int MAXN = 305;
const int INF = 0x3f3f3f3f;
const int N=5e4+7;
const int maxn=1e5+5;
const double EPS=1e-10;
const double Pi=3.1415926535897;
inline double max(double a,double b){
    return a>b?a:b;
}
inline double min(double a,double b){
    return a<b?a:b;
}
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
 
//fastPow
int fastPow(int x,int n){
    if(n==1) return x;
    int tmp=fastPow(x,n/2); //fenzi
    if(n%2==1) return tmp*tmp*x;
    else return tmp*tmp;
}
ll gcd(ll m, ll n){return n == 0 ? m : gcd(n, m%n);}
ll lcm(ll m, ll n){return m*n / gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
 
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}


//dijsktra
//start
//const int MAX= 10020;
//struct node {
//    int x,to,next,w;
//    bool operator <(const node &a) const{
//        return this->w>a.w;
//    }
//}G[MAX<<1];
//int cnt;
//int dis[MAX];
//int vis[MAX];
//int head[MAX];
//
//
//int m,n;
//int b[10020];
//
//
//void add(int u,int v,int w){
//    G[++cnt].to=v;
//    G[cnt].w=w;
//    G[cnt].next=head[u];
//    head[u]=cnt;
//}
//int  dijkstra(int s){
//    mms(dis,INF);
//    dis[s]=0;
//    priority_queue<node> p;
//    node t;
//    t.x=s;
//    t.w=0;
//    p.push(t);
//    while (!p.empty()) {
//        node u=p.top();
//        p.pop();
//        int v=u.x;
//        if(dis[v]!=u.w) continue;
//        for(int i=head[v];i;i=G[i].next){
//            int to=G[i].to;
//            if(dis[to]>dis[v]+G[i].w){
//                dis[to]=dis[v]+G[i].w;
//                t.x=to;
//                t.w=dis[to];
//                p.push(t);
//            }
//
//        }
//    }
//    int m1=-1;
//        int m2=-1;
//        dis[s]=-3;
//        for(int i=1;i<=n;i++){
//            if(dis[i]==INF) continue;
//            if(dis[i]>m1){
//                m2=m1;
//                m1=dis[i];
//            }
//            else if(dis[i]>m2){
//                m2=dis[i];
//            }
//        }
//        if(m1!=-1&&m2!=-1) return m1+m2;
//        return -1;
//
//}
//
//
//int main(){
//    int t;
//    cin>>t;
//    while (t--) {
//        cin>>n>>m;
//        int u,v,w;
//
//        for(int i=1;i<=m;i++){
//            cin>>u>>v>>w;
//            add(u,v,w);
//            add(v,u,w);
//        }
//        int ans=0;
//        int cnt=0;
//        for(int i=1;i<=n;i++){
//            ans=max(ans,dijkstra(i));
//        }
//        cout<<ans<<endl;
//    }
//}
//end


//e_cheak
//int vis[1000010];
//int prime[100010];
//int  e_cheak(int n){   //k为2-n素数的个数
//    for(int i=0;i<=n;i++){
//        vis[i]=0;
//    }
//    for(int i=2;i*i<=n;i++){
//        if(!vis[i]){
//            for(int j=i*i;j<=n;j+=i){
//                vis[j]=1;
//            }
//        }
//    }
//    int k=0;
//    for(int i=2;i<=n;i++){
//        if(!vis[i])
//            prime[k++]=i; //统计素数
//    }
//    return k;
//}
//
////进制转化 x转化为y进制
//string work(int x,int y){
//    string str="";
//    while(x){
//        if(x%y>=10) str+=x%y+'A'-10;
//        else str+=x%y+'0';
//        x/=y;
//    }
//    reverse(str.begin(),str.end());
//    return str;
//}
//
//
//const int MAX=1000005;
//char str[MAX];
//char pattern[MAX];
//int cnt;
//int Next[MAX];
//void  getnext(string p,int plen){
//    Next[0]=0;
//    Next[1]=0;
//    for(int i=1;i<plen;i++){
//        int j=Next[i];
//        while (j&&p[i]!=p[j]) {
//            j=Next[j];
//        }
//        Next[i+1]=(p[i]==p[j])?j+1:0;
//    }
//}
//int kmp(string s,string p){
//    int last=-1;
//    int slen=s.length();
//    int plen=p.length();
//    getnext(p,plen);
//    int j=0;
//    for(int i=0;i<slen;i++){
//        while (j&&s[i]!=p[j]) {
//            j=Next[j];
//        }
//        if(s[i]==p[j]) j++;
//        if(j==plen){
//            //start
//            return 1;
//            //end
//        }
//    }
//    return 0;
//}
//int main(){
//    int n;
//    cin>>n;
//    string t;
//    string s="";
//    for(int i=2;i<=16;i++){
//        s="";
//        s+=work(n,i);
//        if(kmp(s,t))
//        {
//            cout<<"yes";
//            return 0;
//        }
//    }
//    cout<<"no"<<endl;
//    return 0;
//}


//string s1,s2;
//int main(){
//    cin>>s1;
//    s2="cocacola";
//    int ans;
//    for(int i=0;i<s1.length();i++){
//        if(s1[i]!=s2[i])
//            ans++;
//    }
//    cout<<ceil(ans/2);
//}

const int MAX=2e5+10;
struct node {
    int l,r;
    int val,cnt;
    node(){
        cnt=-1;
        val=-1;
    }
}t[MAX<<2];
int n,m;
int  w[MAX];
void bulit(int l,int r,int rt){
    t[rt].l=l;
    t[rt].r=r;
    if(l==r){
        t[rt].val=w[l];
        t[rt].cnt=1;
        return;
    }
    bulit(ls,l,mid);
    bulit(rs,mid+1,r);
    int t=rt;
    
    return;
}
void update(int rt,int x,int k ){
    int l=t[rt].l;
    int r=t[rt].r;
    if(l==r){
        t[rt].val=k;
        return;
    }
    if(x<=mid) update(ls, x, k);
    if(x>mid) update(rs,x,k);
    ppush(rt);
    return;
}
void ppush(int rt){
    if(t[ls].val==t[rs].val){
        t[rt].val=t[ls].val;
        t[rt].cnt=t[ls].cnt+t[rs].cnt;
    }
    else if(t[rs].val<t[ls].val){
        t[rt].val=t[ls].val;
        t[rt].cnt=t[ls].cnt;
    }
    else {
        t[rt].val=t[rs].val;
        t[rt].cnt=t[rs].cnt;
    }
}
node query(int rt,int x,int y){
    int l=t[rt].l;
    int r=t[rt].r;
    if(l>=x&&r<=y) return t[rt];
    node rres,lres,res;
    if(x<=mid){
        rres=query(ls,x,y);
    }
    if(y>mid) lres=query(rs,x,y);
    if(lres.val==rres.val) {
        res.val=rres.val;
        res.cnt=rres.cnt+lres.cnt;
    }
    else if (lres.val>rres.val){
        res=lres;
    }
    else res=rres;
    return  res;
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>w[i];
    }
    bulit(1,1,n);
    string s;
    while (m--) {
        cin>>s;
        if(s=="Ask"){
            int l,r;
            cin>>l>>r;
            node tmp=query(l,r,1);
            cout<<tmp.val<<" "<<tmp.cnt<<endl;
        }
        else if(s=="Change"){
            int x,val;
            cin>>x>>val;
            update(1,x,val);
        }
    }
}

一篇文章带你快速入门 MATLAB 文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一 阅读详情

相关推荐

Labview及NI-USRP驱动安装教程

软件下载 安装使用的LabVIEW2018及NI-USRP驱动程序已上传,下载地址: 天翼云盘链接 (访问码:oc33) 百度网盘链接 (提取码:88mi) (注:天翼云盘下载不限速) LabVIEW2018安装步骤 右键软件压缩包选择解压至LabVIEW2018 选中文件,鼠标右击选择以管理员身份打开2018LV-WinChn.exe文件。 点击确定。 点击Unzip解压。 点击确定。 点击下一步。 填写任意信息后,点击下一步。 点击下一步。 点击浏览更改安装路径建议安装到除C盘以

dadapongi6的博客 2万+

用优先队列求第K小的数

#include<iostream> #include<cstdio> #include<queue> #include<bitset> #include<cstring> #include<algorithm> #define mod 100000007 using namespace std; typedef long ...

没有梦想何以远行 1967

深入解析XTEA加密算法的核心机制与优化策略

本文深入解析XTEA加密算法的核心机制与优化策略,详细介绍了XTEA在嵌入式系统和资源受限环境中的优势,包括其高效的加解密速度和低资源消耗。文章还探讨了XTEA的轮函数设计、关键参数优化策略以及实战应用中的性能对比,为开发者提供了安全增强方案和优化技巧。

k8l9m0n的博客 242

1004. Counting Leaves (30)

#include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #include&lt;sstream&gt; #include&lt;algorithm&gt; #include&lt;cctype&gt; #include&lt;vector&gt; #include&lt;iomanip&gt;

buaapascal的博客 259

AI量化交易工作台Vibe-Trading:用自然语言驱动策略回测与多智能体研究

量化交易通过数学模型和计算机程序执行投资决策,其核心在于将市场规律转化为可验证的策略。传统量化开发涉及数据获取、策略编写、回测验证等复杂工程,对非编程背景的从业者构成较高门槛。随着大语言模型技术的发展,自然语言交互正成为降低技术使用难度的关键。Vibe-Trading项目正是这一趋势的实践,它将金融工程任务封装为可调用的工具与技能,允许用户通过自然语言指令直接驱动策略回测、因子研究和投资组合分析。其技术价值在于构建了一个模块化的AI Agent框架,通过ReAct推理框架协调多个专项技能,并创新性地引入多智

weixin_28695161的博客 1566

【正点原子STM32连载】第六十章 串口IAP实战:从Bootloader到APP的无缝升级

本文以正点原子STM32F103开发板为例,详细讲解了串口IAP(在应用编程)技术的实现原理与实战步骤。内容涵盖Bootloader与APP的分工、FLASH空间规划、核心代码解析以及Ymodem协议的应用,旨在帮助开发者掌握通过串口为嵌入式设备实现远程固件升级的关键技术,提升产品维护与迭代效率。

weixin_29161719的博客 445

第k小【优先队列】

题目链接 题目描述  有一个长度为n的数组,值为 a[i], 牛牛想找到数组中第 k 小的数。比如 1 2 2 3 4 6 中,第 3 小的数就是2.  牛牛觉得这个游戏太简单了,想加一点难度,现在牛牛有 m 个操作,每个操作有两种类型。  1 x 1 代表操作一,给数组中加一个元素 x 。(0 ≤ x ≤ 1e9)  2 2 代表操作二,查询第 k 小的数。如果没有 k 个数就输出−1 输入描述: 第一行有三个整数,n m k,(1≤n,m,k≤2e5) 第二行包含 n 个整数 a[i] (

包子不卖包子 595

cut&tag学习笔记

上图是我得到的结果,下图是教程的结果,比对结果有一些差异,我也不知道具体原因是啥。谷歌了一下,发现原因可能是因为环境变量的问题,系统不知道picard的具体位置,需要设置全局环境变量,遂查了一下picard的位置。我发现我做出来的结果测序深度一致,但是比对的结果有一点差异,不知道是我的操作问题,还是参考基因组更新了导致比对结果出现了些许不同。上图是我得到的结果,下图是教程的结果,除了IgG_rep1外比对结果一致。上图是我的结果,下图是教程的结果,结果不太一致,不知道是具体的原因是什么。

weixin_52073820的博客 2422

力扣剑指offer40.最小k个数-----优先队列解法c++

力扣剑指offer40

asdasd121312dasd的博客 613

2024 全国大学生新质生产力大赛 B:金融违规交易的大数据分析 问题四思路代码

问题四:请分析附件中所有的指标数据,选取合适的指标,建立“金融违规 洗钱交易的预测模型”,并选取合适的训练集和测试集,计算预测模型的准确率。 为了提前识别并预测金融违规洗钱的交易事件,请基于你们团队数据分析的结果, 分别给公安部门和银行机构提出你们的建议。

YOLO 375

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1388

剑指offer-29 -- 最小的K个数 - C++

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 方法一:排序 直接排序,然后去前k小数据。 时间复杂度:O(nlongn) 空间复杂度:O(1) 方法二:堆排序 建立一个容量为k的大根堆的优先队列。遍历一遍元素,如果队列大小<k,就直接入队,否则,让当前元素与队顶元素相比,如果队顶元素大,则出队,将当前元素入队 代码 class Solution { public: vector<int

小白_努力 375

OpenTK简介

OpenTK 因其强大的功能、跨平台特性和灵活性,适用于多种需要图形和计算能力的应用场景,为开发者提供了丰富的可能性和创作空间。

仰望星空的博客 1980

【封印宝石——线段树】

封印宝石题解。

Kent的博客 437

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JZOJ1495 宝石

宝石DescriptionInputOutputHintSolution对于60%对于100%Code Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想让魔术方巾触碰到的

SportRiver的博客 260

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

1495. 宝石

Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想让魔术方巾触碰到的宝石的价值最多,可要在短短的1秒钟之内解决问题,也感到力不从心,你能帮帮她吗? Input 输入文

zsjzliziyang的博客 199

蓝桥杯2024年第十五届省赛A组-封印宝石

使用贪心的思想,并用线段树维护数组的最大值和次最大值。每次选最大的一个值放到前面,同时为了节省体力,需要选相同的这个最大值最前面的一个,放入后进行删掉操作。

hehe_666888的博客 2483

力扣杯春赛 ,宝石补给、烹饪料理Easy

写在前面,本文是博主打春赛的记录,另外,博主是“菜鸡” 比赛来晚了,打开电脑,进入竞赛界面,ohhhhhhhhhhhh,有点高端,还有动态榜,有点ICPC和ACM的味道了,总体浏览题目,2 + 1 + 2 五个题,简单+中等+困难。直接抛弃后两个困难题。 第一题:宝石补给,题意就是给一个数组表示每人所拥有的宝石,然后一个操作数组,把第一个操作数的宝石的一半(下取整)给第二个操作数,最终返回一个最大宝石数与最小宝石数的差。纯模拟,数据量不大,Easy题。直接贴代码! class Solution { pu

代码的尽头都是数学 575

[jzoj 1495] 宝石 {扫描线+线段树维护+离散化}

题目 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想...

Nowed 648

JZOJ2020年8月11日提高组T2 宝石

JZOJ2020年提高组T2 宝石 题目 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想让魔术方巾触碰到的宝石的价值最多,可要在短短的1秒钟之内解决问题,也感到力不从心

LZX_lzx的博客 227

线段树+鸽巢原理+位运算+贪心,MT3069宝石的魔力波动

好题

EQUINOX1的博客 675

The 2020 ICPC Asia Macau Regional Contest J.Jewel Grab 线段树+双向链表模拟

思路 对于每个位置的宝石,分别维护pre[i]pre[i]pre[i](同色前一宝石所在位置)和nxt[i]nxt[i]nxt[i](同色后一宝石所在位置)。 注意到kkk很小,那么对于每次询问,我们可以从开始点往后找,查询当前点是否有同色点位于前面且位于[s,n][s,n][s,n]内,有的话比较大小,决定是否跳过。 对于区间单点维护操作,我们需要对preprepre和nxtnxtnxt进行更新,更新的过程类似于单链表,每个颜色单独构成一条链: 删除原有元素(讨论:元素位于序列头部、尾部、中间)。 添加

HeartFireY的博客 1449

JZOJ(GMOJ)1495. 宝石[扫描线]

今天滚回提高,感觉挺不舒服的, 然后突然想起来写篇博客 随便水一篇吧 Description 见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想让魔术方巾触碰到的宝石的价值最多,可要在短短的1秒钟

cjy_12的博客 279

【2022ICPC沈阳I题解】【值域线段树+贪心】The 2022 ICPC Asia Shenyang Regional Contest I. Quartz Collection

线段树里面存区间和在区间内的数的个数那么对于每次修改,我们拿的位置是确定的,我们用值域线段树维护sum[4],分别表示从i号位相隔4个位置的和(例如 1 2 3 4 5 6 7 3 2 ,sum[0] = 1 + 5 + 2),那么对于Bob ,小于0区间的sum[2]+sum[3] 就是他取的值,大于0的部分需要根据小于0的奇偶性来判别。

csxylrf的博客 1347

Jzoj P1495 宝石___线段树+扫描线+离散化

题目大意: 在一个M∗MM∗MM*M的正方形平面中,给出NNN个宝石的坐标(xi,yi)(xi,yi)(xi,yi),每个宝石的价值为AiAiAi,有一块K∗KK∗KK*K的布,问能覆盖的宝石的最大价值和是多少,宝石在布的边缘也算。 1≤m≤50000,1≤n≤50000,1≤k≤100001≤m≤50000,1≤n≤50000,1≤k≤100001≤m≤50000,1≤n≤50000,1≤k...

生如夏花之绚烂 469

2018.8.18T1(线段树)

宝石(gem) 【题目描述】 有 n 座城市,编号为 1~n,第 i 座城市里宝石的交易价格为 ai。当 你经过第 i 座城市时,你可以以 ai 的价格购买或卖出一个宝石。在任 意时刻,你最多只能携带一个宝石。 有 m 次操作,操作分为两种: (1) 给定l,r,询问依次经过编号为l~r的城市能获得的最大收益。 (2) 给定 l,r,x,y,将 al 至 ar 修改为首项为 x...

a1035719430的博客 316

牛客小白月赛82 解题报告(E-F) | 珂学家 | 状压容斥 + 反悔堆 + 动态开点线段树

这场小白真心难,E题成为这场的意难平,最后时候才理清。不过我是动态开点的线段树做法,时间刚好卡过。C是状压+容斥,也可以用矩阵幂加速, D是反悔堆贪心,E其实是线段树优化的DP。

m0_66102593的博客 462
上一篇: 牛客练习赛33题解
下一篇: I Hate It(树状数组 单点修改 区间最值)
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值