当前位置:网站首页>HDU multi School Game 2 1011 DOS card
HDU multi School Game 2 1011 DOS card
2022-07-29 03:22:00 【Foolish last words】
Preface :
How can people get worse ?
Text :
At first glance, this question , It's easy to think of using segment trees , But what do you maintain with a segment tree ? This is what I didn't think clearly during the game .
In fact, the main idea of this question is to judge the number of cards at both ends . The core of the segment tree is to merge both ends , So how to extract from this paragraph 4 Card becomes the key to the merger . We can understand intuitively from the quantity , namely : Discuss separately from [ l , m i d ] [l,mid] [l,mid] Segment extraction 0 Zhang , 1 Zhang , 2 Zhang , 3 Zhang , and 4 Zhang's situation .
Further , We need to think about what these cards mean . for instance , If you only draw one card , So in [ l , m i d ] [l , mid] [l,mid] It must be the card with the largest draw in the paragraph , If you smoke two , Then these two can be a pair , It can also be two maximum cards . And so on , We can get the information we need to maintain , As stated in the solution .
AC Code :
#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);
}
边栏推荐
- Data truncation and estimation
- Verilog:阻塞赋值和非阻塞赋值
- Regular expression bypasses WAF
- Rongyun IM & RTC capabilities on new sites
- Implement Lmax disruptor queue from scratch (VI) analysis of the principle of disruptor solving pseudo sharing and consumers' elegant stopping
- 一种简单通用的获取函数栈空间大小的方法
- 13_ UE4 advanced_ Montage animation realizes attack while walking
- 照片比例校正工具:DxO ViewPoint 3 直装版
- Shell script summary
- Engineering boy: under 20 years old, ordinary but not mediocre
猜你喜欢
AI platform, AI midrange architecture
[freeswitch development practice] unimrcp compilation and installation
Wechat's crazy use of glide - life cycle learning
Calculation of array serial number of force deduction questions (daily question 7/28)
[technology 1]
Summarize the knowledge points of the ten JVM modules. If you don't believe it, you still don't understand it
How to solve the time zone problem in MySQL timestamp
Verilog: blocking assignment and non blocking assignment
Tonight at 7:30 | is the AI world in the eyes of Lianjie, Jiangmen, Baidu and country garden venture capital continue to be advanced or return to the essence of business
2022-07-28 第四小组 修身课 学习笔记(every day)
随机推荐
Learn more than 4000 words, understand the problem of this pointing in JS, and handwrite to realize call, apply and bind
Detailed steps for installing MySQL 8.0 under Linux
照片比例校正工具:DxO ViewPoint 3 直装版
How to deploy sentinel cluster of redis
Redis configuration cache expiration listening event trigger
Shardingsphere's level table practice (III)
军品技术文件划分及说明
Data truncation and estimation
Summary of basic knowledge points of C language
反脆弱·从不确定性中获益---管理?
MYSQL入门与进阶(十三)
C language programming | exchange binary odd and even bits (macro Implementation)
Incremental real-time disaster recovery notes
Photo scale correction tool: DxO viewpoint 3 direct mount version
C traps and defects Chapter 2 syntax "traps" 2.6 problems caused by "hanging" else
基于单片机烟雾温湿度甲醛监测设计
13_ UE4 advanced_ Montage animation realizes attack while walking
Division and description of military technical documents
Apache文件管理自学笔记——映射文件夹和基于单ip多域名配置apache虚拟机
C语言基础知识点汇总