当前位置:网站首页>HDU多校第二场 1011 DOS Card
HDU多校第二场 1011 DOS Card
2022-07-29 03:19:00 【愚末语】
前言:
人怎么会越来越差呢?
正文:
初看此题,很容易想到用线段树,但是用线段树维护什么东西呢?这一点是我在比赛时没有想清楚的。
其实这道题的主要思路是判断卡牌在两端的个数。线段树的核心是将两端合并,那么如何在这段中抽取4张卡就成了合并的关键。我们可以从数量上直观理解,即:分别讨论从 [ l , m i d ] [l,mid] [l,mid]段抽取0 张 , 1 张 , 2 张, 3张 , 和4张的情况。
再进一步,我们要想这几张牌分别表示什么。比如说,如果只抽一张卡,那么在 [ l , m i d ] [l , mid] [l,mid]段中一定是抽最大的那张卡, 如果说抽两张,那么这两张可以是一对,也可以是两张最大值的卡牌。以此类推,我们可以得到我们需要维护的信息,如题解中所说一般。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>inline void MAX(T &x,T y){
if(y>x)x=y;}
template<class T>inline void MIN(T &x,T y){
if(y<x)x=y;}
template<class T>inline void rd(T &x){
x=0;char o,f=1;
while(o=getchar(),o<48)if(o==45)f=-f;
do x=(x<<3)+(x<<1)+(o^48);
while(o=getchar(),o>47);
x*=f;
}
template<class T>inline void print(T x,bool op=1){
static int top,stk[105];
if(x<0)x=-x,putchar('-');
if(x==0)putchar('0');
while(x)stk[++top]=x%10,x/=10;
while(top)putchar(stk[top--]+'0');
putchar(op?'\n':' ');
}
const int M=1e5+5;
int cas,n,m,A[M];
struct node{
int len;
ll max1,max2,min1,min2,res1,res2,res1_max,res1_min;
node(int len=0){
this->len=len;
max1=max2=-1e18;
min1=min2=1e18;
res1=res2=res1_max=res1_min=-1e18;
}
void update_max(ll v){
if(v>max1)max2=max1,max1=v;
else if(v>max2)max2=v;
}
void update_min(ll v){
if(v<min1)min2=min1,min1=v;
else if(v<min2)min2=v;
}
node operator +(const node &A)const{
if(len==0)return A;
if(A.len==0)return *this;
node T(len+A.len);
T.update_max(max1);
T.update_max(max2);
T.update_max(A.max1);
T.update_max(A.max2);
T.update_min(min1);
T.update_min(min2);
T.update_min(A.min1);
T.update_min(A.min2);
MAX(T.res2,res2);
MAX(T.res2,A.res2);
MAX(T.res2,res1+A.res1);
MAX(T.res2,max1+max2-A.min1-A.min2);
MAX(T.res2,res1_max-A.min1);
MAX(T.res2,max1+A.res1_min);
MAX(T.res1,res1);
MAX(T.res1,A.res1);
MAX(T.res1,max1-A.min1);
MAX(T.res1_max,res1_max);
MAX(T.res1_max,A.res1_max);
MAX(T.res1_max,res1+A.max1);
MAX(T.res1_max,A.res1+max1);
if(A.len>=2)MAX(T.res1_max,max1-A.min1+A.max1);
if(len>=2)MAX(T.res1_max,max1-A.min1+max2);
MAX(T.res1_min,res1_min);
MAX(T.res1_min,A.res1_min);
MAX(T.res1_min,res1-A.min1);
MAX(T.res1_min,A.res1-min1);
if(A.len>=2)MAX(T.res1_min,max1-A.min1-A.min2);
if(len>=2)MAX(T.res1_min,max1-A.min1-min1);
return T;
}
}tree[M<<2];
void build(int l=1,int r=n,int p=1){
if(l==r){
tree[p]=node(1);
tree[p].max1=tree[p].min1=1ll*A[l]*A[l];
return;
}
int mid=l+r>>1;
build(l,mid,p<<1);
build(mid+1,r,p<<1|1);
tree[p]=tree[p<<1]+tree[p<<1|1];
}
node query(int a,int b,int l=1,int r=n,int p=1){
if(l>b||r<a)return node(0);
if(l>=a&&r<=b)return tree[p];
int mid=l+r>>1;
return query(a,b,l,mid,p<<1)+query(a,b,mid+1,r,p<<1|1);
}
signed main(){
#ifndef ONLINE_JUDGE
// freopen("jiedai.in","r",stdin);
// freopen("jiedai.out","w",stdout);
#endif
rd(cas);
while(cas--){
rd(n),rd(m);
for(int i=1;i<=n;i++)rd(A[i]);
build();
while(m--){
int l,r;
rd(l),rd(r);
print(query(l,r).res2);
}
}
return (0-0);
}
边栏推荐
- July 28, 2022 Gu Yujia's study notes
- MYSQL入门与进阶(十三)
- Principle knowledge is useful
- Wechat's crazy use of glide - life cycle learning
- C和指针 第3章 语义“陷阱” 3.5 空指针并非字符串
- 力扣刷题之数组序号计算(每日一题7/28)
- MySQL large table joint query optimization, large transaction optimization, avoiding transaction timeout, lock wait timeout and lock table
- What is eplato cast by Plato farm on elephant swap? Why is there a high premium?
- Singleton mode (hungry and lazy)
- Does domestic ERP have a chance to beat sap?
猜你喜欢

数字图像处理 第10章——图像分割

Shell编程规范与变量

How to deploy sentinel cluster of redis

STC单片机驱动1.8‘TFT SPI屏幕演示示例(含资料包)

Summarize the knowledge points of the ten JVM modules. If you don't believe it, you still don't understand it

Design of smoke temperature, humidity and formaldehyde monitoring based on single chip microcomputer

Chapter 2 VRP command line

Tp5.0 applet users do not need to log in and directly obtain the user's mobile number.

力扣刷题之数组序号计算(每日一题7/28)

今晚7:30 | 连界、将门、百度、碧桂园创投四位大佬眼中的AI世界,是继续高深还是回归商业本质?...
随机推荐
C陷阱与缺陷 第3章 语义“陷阱” 3.8 运算符&&、||和!
13_ UE4 advanced_ Montage animation realizes attack while walking
2022-07-28 study notes of group 4 self-cultivation class (every day)
年内首个“三连跌” 95号汽油回归“8元时代“
Division and description of military technical documents
接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
C traps and defects Chapter 2 syntax "traps" 2.6 problems caused by "hanging" else
Principle knowledge is useful
C陷阱与缺陷 第3章 语义“陷阱” 3.4 避免“举偶法”
Redis之sentinel哨兵集群怎么部署
Shell programming specifications and variables
国产ERP有没有机会击败SAP ?
MySQL operation database data error: fatal error encoded during command execution
C traps and defects Chapter 3 semantic "traps" 3.9 integer overflow
How close can QA be to business code QA conducts testability transformation on business code
[QNX hypervisor 2.2 user manual]9.11 RAM (under update)
Practical guidance for interface automation testing (Part I): what preparations should be made for interface automation
C陷阱与缺陷 第3章 语义“陷阱” 3.9 整数溢出
生产部署zabbix5.0笔记
Shell编程规范与变量