LG1198/BZOJ1012 「JSOI2008」最大数 线段树+离线
2024-10-19 01:36:51
问题描述
题解
我们把所有操作离线,设一共有\(n\)个插入操作。
于是提前建立\(n\)个数,全部设为\(-INF\)
接着逐个处理操作即可。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
#define int long long
template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-'){
fh=-1;ch=getchar();
}
else fh=1;
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
x*=fh;
}
const int maxn=1000000+7;
const int INF=0x3f3f3f3f3f3f3f3fLL;
int T,mod,n;
int cz[maxn],ext[maxn];
int nowt[maxn];
void fr(int &x){
char ch=1;
while(ch!='Q'&&ch!='A') ch=getchar();
x=(ch=='A')+1;
}
int mx[maxn<<2];
#define lfc (x<<1)
#define rgc ((x<<1)|1)
#define mid ((l+r)>>1)
void pushup(int x){
mx[x]=max(mx[lfc],mx[rgc]);
}
void build(int x,int l,int r){
if(l==r){
mx[x]=-INF;return;
}
build(lfc,l,mid);build(rgc,mid+1,r);
pushup(x);
}
int L,R,need;
void change(int x,int l,int r){
if(l==r){
mx[x]=need;return;
}
if(L<=mid) change(lfc,l,mid);
else change(rgc,mid+1,r);
pushup(x);
}
int query(int x,int l,int r){
if(r<L||l>R) return -INF;
if(L<=l&&r<=R) return mx[x];
return max(query(lfc,l,mid),query(rgc,mid+1,r));
}
int las;
signed main(){
read(T);read(mod);
for(int i=1;i<=T;i++){
fr(cz[i]);read(ext[i]);
if(cz[i]==2) ++n;
nowt[i]=n;
}
build(1,1,n);
for(int i=1;i<=T;i++){
if(cz[i]==1){
L=nowt[i]-ext[i]+1,R=nowt[i];
las=query(1,1,n);
printf("%lld\n",las);
}
else{
L=nowt[i],need=(ext[i]+las)%mod;
change(1,1,n);
}
}
return 0;
}
最新文章
- python中的参数问题
- FCN网络的训练——以SIFT-Flow 数据集为例
- 初试FitNesse
- Codeforces Round #260 (Div. 2) C
- kuangbin_ShortPath D (POJ 3268)
- SQL server 为多个表添加新的列
- 【转载】常用Maven插件介绍
- 代理模式及其在spring与struts2中的体现
- ajax 第四步
- C# 汉语转拼音
- python---random模块使用详解
- Java并发编程之显式锁机制
- c# 制作正方形图片
- MODBUS协议解析中常用的转换帮助类(C#)
- python主流测试框架的简介
- CMOS Sensor的调试经验分享【转】
- Windows10系统网络连接问题
- Ext Js 6+ 如何引入dashboard模版
- docker 进程监控 Dumb-Init进程信号处理 --转自https://blog.csdn.net/tiger435/article/details/54971929
- 20135316Linux内核学习笔记第六周