題目描述
題解
維護兩顆線段樹,維護最大值和最小值,因為每次只有單點查詢,所以可以直接在區間插入線段就可以了。
注意卡常,不要寫stl,用鍊錶把同類修改串起來就好了。
**
%:pragma gcc optimize(2)%:pragma gcc optimize(3
)#include
#include
#include
#include
#include
#include
#define n 600009
using
namespace
std;
typedef
long
long
ll;struct
node;
intn,m,la[n],pre[n];
ll t[n],pos[n],b[n],top,now[n],k[n],x[n],tag[n];
char s[10
];inline ll rd()
while(isdigit(c))
return f?-x:x;
}inline ll calc(ll l,ll r,ll x,ll k)
struct
segment1tr[n
<<1
];
inttot,root;
void work(int &cnt,int l,int
r,ll x,ll k)
ll x1=calc(b[l],b[mid],x,k),x2=calc(b[l],b[mid],tr[cnt].x,tr[cnt].k);
if(x1>=x2)
if(l==r)return
;
if(x>=tr[cnt].x)work(tr[cnt].l,l,mid,x,k);else work(tr[cnt].r,mid+1,r,x+(b[mid+1]-b[l])*k,k);
} void upd(int &cnt,int l,int r,int l,int
r,ll x,ll k)
int mid=(l+r)>>1
;
if(mid>=l)upd(tr[cnt].l,l,mid,l,r,x,k);
if(mid1
,r,l,r,x,k);
}}t1;
struct
segment2tr[n
<<1
];
inttot,root;
void work(int &cnt,int l,int
r,ll x,ll k)
ll x1=calc(b[l],b[mid],x,k),x2=calc(b[l],b[mid],tr[cnt].x,tr[cnt].k);
if(x1<=x2)
if(l==r)return
;
if(x<=tr[cnt].x)work(tr[cnt].l,l,mid,x,k);else work(tr[cnt].r,mid+1,r,x+(b[mid+1]-b[l])*k,k);
} void upd(int &cnt,int l,int r,int l,int
r,ll x,ll k)
int mid=(l+r)>>1
;
if(mid>=l)upd(tr[cnt].l,l,mid,l,r,x,k);
if(mid1
,r,l,r,x,k);
}}t2;
ll query(
intx)
ans2=llabs(ans2);
return
max(ans1,ans2);
}int
main()
}t[m+1]=t[m]+1;b[++top]=0;b[++top]=t[m]+1
; sort(b+1,b+top+1
); top=unique(b+1,b+top+1)-b-1
;
for(int i=1;i<=m;++i)t[i]=lower_bound(b+1,b+top+1,t[i])-b;
for(int i=1;i<=n;++i)
for(int i=1;i<=n;++i)
for(int i=1;i<=m;++i)
else printf("
%lld\n
",query(t[i]));
}return0;
}
集訓隊互測2015 最大異或和
首先不知道有沒有神仙線段樹分治過的。首先乙個較為顯然的性質 mathrm mathrm 這個啟發我們維護差分序列,此時1操作變成了單點異或,2操作變成了單點異或以及區間清空。但是這道題維護的是線性基,所以要用帶刪除的線性基實現。具體見 集訓隊作業2018 圍繞著我們的圓環 此時單點異或顯然可以變成插...
集訓隊互測 2012 Attack
description chnlich非常喜歡玩三國志這款遊戲,並喜歡用一些策略出奇制勝。現在,他要開始征服世界的旅途了。他的敵人有n nn座城市和n nn個太守,n nn個城市可以看作在二維平面上的n nn個點。n nn座城市的標號為0,1 2,n 1 0,1,2,cdots,n 1 0,1,2,...
集訓隊互測2013 城市規劃
求n個點的帶標號連通簡單圖的個數。答案對1004535809取模。n 130000 根據套路,首先我們需要求出n個點的帶標號簡單圖的個數,設為g n 顯然我們有g n 2 n n 1 2 考慮設答案為f n 要怎麼求出?列舉1號點所在的聯通塊的大小,我們可以知道 g n i 1n f i ci 1 ...