2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)

时间:2022-11-06 13:25:46

传送门

sb题。

直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继。

插入一个数的时候更新一下就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int ans=0,w=1;
    char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans*w;
}
const int N=5e5+5,inf=1e9+5e8;
int n,m,a[N],ans=inf,hd[N],tl[N];
multiset<int>T,R;
int main(){
    n=read(),m=read(),T.insert(-inf),T.insert(inf);
    for(int i=1;i<=n;++i){
        hd[i]=tl[i]=a[i]=read();
        T.insert(a[i]);
        multiset<int>::iterator it=T.find(a[i]);
        --it,ans=min(ans,a[i]-(*it)),++it;
        ++it,ans=min(ans,(*it)-a[i]),--it;
    }
    for(int i=1;i<n;++i)R.insert(abs(a[i]-a[i+1]));
    while(m--){
        char s[10];
        int x,y;
        scanf("%s",s);
        if(s[0]=='I'){
            x=read(),y=read(),T.insert(y);
            multiset<int>::iterator it=T.find(y);
            --it,ans=min(ans,y-(*it)),++it;
            ++it,ans=min(ans,(*it)-y),--it;
            if(x^n)R.erase(R.find(abs(hd[x+1]-tl[x]))),R.insert(abs(hd[x+1]-y));
            R.insert(abs(tl[x]-y)),tl[x]=y;
        }
        else if(s[4]=='G')printf("%d\n",*R.begin());
        else printf("%d\n",ans);
    }
    return 0;
}

2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)的更多相关文章

  1. 洛谷 P1110 &lbrack;ZJOI2007&rsqb;报表统计 解题报告

    P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...

  2. 洛谷&period;1110&period;&lbrack;ZJOI2007&rsqb;报表统计&lpar;Multiset Heap&rpar;

    题目链接 主要思路 /* 对于询问1,用堆代替multiset/Splay 对于询问2,multiset 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个 ...

  3. 洛谷&period;1110&period;&lbrack;ZJOI2007&rsqb;报表统计&lpar;Multiset&rpar;

    题目链接 主要思路 /* 其实只需要multiset即可 对于询问1,删除.插入差值,输出最小元素 对于询问2,插入后用前驱后继更新 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一 ...

  4. BZOJ1058或洛谷1110 &lbrack;ZJOI2007&rsqb;报表统计

    BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以 ...

  5. 洛谷&period;1110&period;&lbrack;ZJOI2007&rsqb;报表统计&lpar;Splay Heap&rpar;

    题目链接 附纯SplayTLE代码及主要思路: /* 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段 ...

  6. Luogu P1110 &lbrack;ZJOI2007&rsqb;报表统计 multiset

    沿用了学长的$multiset$ 然后这道题可以看到我的程序中有两行注释,它在我看来和他们下面的代码没区别,但是我们发现,C++会先调用后面的参数,所以$--it$会被先执行 ... ... ... ...

  7. 2018&period;11&period;06 洛谷P1099 树网的核(最短路&plus;枚举)

    传送门 之前看李煜东的书一直感觉是道神题. 然后发现这题数据范围只有300?300?300? 直接上floydfloydfloyd然后暴力就完了啊. 代码: #include<bits/stdc ...

  8. 2018&period;11&period;06 洛谷P1941 飞扬的小鸟(背包)

    传送门 上升看成完全背包. 下降看成01背包. 注意边界转移就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int ...

  9. 2018&period;11&period;04 洛谷P2679 子串(线性dp)

    传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...

随机推荐

  1. OS存储器管理&lpar;一&rpar;

    存储器的层次: 分为寄存器.主存(内存)和 辅存(外存)三个层次. 主存:高速缓冲存储器.主存储器.磁盘缓冲存储器, 主存又称为可执行存储器: 辅存:固定磁盘存储器.可移动的外部存储器: 其可长期保存 ...

  2. 基于SSL协议的双向认证 - 数字证书 &lbrack;2&rsqb;

    1.1    数字证书 1.1.1   概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...

  3. Win10 下使用 ionic 框架开发 android 应用之搭载开发环境

    转载请注明出处:http://www.cnblogs.com/titibili/p/5102035.html 谢谢~ 1.下载JDK并配置Java运行环境 http://www.oracle.com/ ...

  4. access violation at address General protection fault

    https://en.wikipedia.org/wiki/General_protection_fault In memory errors, the faulting program access ...

  5. PHP中刷新输出缓冲&comma;立即输出数据

    <script type="text/javascript"> function show_message(message) { document.getElement ...

  6. Context Switch Definition

    A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...

  7. puppetSvn集成

  8. bzoj4554&colon; &lbrack;Tjoi2016&amp&semi;Heoi2016&rsqb;游戏 二分图匹配

    4554: [Tjoi2016&Heoi2016]游戏 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能 ...

  9. maven 创建后报错

    <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId& ...

  10. 如何使用 GDB

    前期准备 启动GDB方法 设置运行参数 查看源码 断点break 使用 运行程序 查看运行时数据 查看内存数据 分割窗口 问题汇总 参考文献 GDB, The GNU Project debugger ...