当前位置:网站首页>洛谷P1110 报表统计 multiset stl好题
洛谷P1110 报表统计 multiset stl好题
2022-08-09 07:01:00 【swust_fang】
题目链接
一开始自己想的是multiset维护顺序结构,然后查找所有的值差最小时候找加入的当前点的前驱以及后继,然后查找相邻两个的就用线段树维护一个差最小值~,但是后来发现是全局的,直接再开一个multiset维护相邻段之差就行了,但是set的话要删除,也挺费时间的,不是所有点相邻都往set里边装,比如在某一个段加一个点的时候他前一个点的差值直接用一个ans来储存最小,然后输出的时候差的set里边最小值与ans比较一下就行。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#include<time.h>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a, b, c, d) min(min(a,b),min(c,d))
#define min3(x, y, z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
#define li __int128
void print(li x) {if(x>9) print(x/10);putchar(x%10+48);}
const int dir[4][2] = {0, -1, -1, 0, 0, 1, 1, 0};
typedef long long ll;
typedef unsigned long long ull;
const ll inFF = 9223372036854775807;
using namespace std;
const int maxn=1e6+5;
int st[maxn],ed[maxn];
multiset<int> s,ss;
char str[20];
int main()
{
int n,m,x,val;
cin>>n>>m;
int ans=inff,anss=inff;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
st[i]=ed[i]=x;
}
for(int i=1;i<=n;i++)
{
if(i<n) ss.insert(abs(st[i]-st[i+1]));
auto it=s.lower_bound(st[i]);
if(it!=s.end()) ans=min(ans,*it-st[i]);
if(it!=s.begin()) it--,ans=min(ans,st[i]-*it);
s.insert(st[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%s",str);
if(strcmp(str,"INSERT")==0)
{
scanf("%d %d",&x,&val);
auto it=s.lower_bound(val);
if(it!=s.end()) ans=min(ans,*it-val);
if(it!=s.begin()) it--,ans=min(ans,val-*it);
s.insert(val);
anss=min(anss,abs(ed[x]-val));
if(x!=n)
{
it=ss.lower_bound(abs(st[x+1]-ed[x]));
ss.erase(it);
ss.insert(abs(st[x+1]-val));
}
ed[x]=val;
}
else if(strcmp(str,"MIN_SORT_GAP")==0) printf("%d\n",ans);
else printf("%d\n",min(anss,*ss.begin()));
}
return 0;
}
边栏推荐
猜你喜欢

细谈VR全景:数字营销时代的宠儿

【Oracle 11g】Redhat 6.5 安装 Oracle11g

Quectel EC20 4G module dial related

排序第四节——归并排序(附有自己的视频讲解)

高项 04 项目变更管理

SAP ALV 数据导出被截断的bug

变压器的工作原理(图解,原理图讲解,一看就懂)

当酷雷曼VR直播遇上视频号,会摩擦出怎样的火花?

postgresql Window Functions

Altium designer software commonly used the most complete package library, including schematic library, PCB library and 3D model library
随机推荐
事务总结
The AD in the library of library file suffix. Intlib. Schlib. Pcblib difference
01 自然语言处理NLP介绍
顺序表删除所有值为e的元素
jvm线程状态
Simple to use Lambda expressions
Output method of list string print(*a) print(““.join(str(c) for c in a) )
95后,刚工作2-3年就年薪50W+ ,才发现打败我们的,从来不是年龄···
P7 Alibaba Interview Questions 2020.07 Sliding Window Algorithm (Alibaba Cloud Interview)
codeforces Valera and Elections (这思维题是做不明白了)
The Integer thread safe
Variable used in lambda expression should be final or effectively final报错解决方案
String.toLowerCase(Locale.ROOT)
AD picture PCB tutorial 20 minutes clear label shop operation process, copper network
排序第四节——归并排序(附有自己的视频讲解)
2017.10.26模拟 b energy
常见的分布式事务解决方案
物理层课后作业
高德地图JS - 已知经纬度来获取街道、城市、详细地址等信息
C language implements sequential stack and chain queue