附動態線段樹ac**
在乙個全部塗黑色的條子上塗上一些白色或黑色的片段,問最大白色片段。
僅僅從線段樹維護節點的角度上來看很簡單,維護最大白色片段,左邊最大白色片段,右邊最大白色片段就好了。
由於條子的長度長達1-int_max;
採用離散化,或者像我一樣失了智去用動態線段樹的方法,也能ac
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define for(i, x, y) for(int i=x; i<=y; i++)
#define _for(i, x, y) for(int i=x; i>=y; i--)
#define mem(f, x) memset(f, x, sizeof(f))
#define sca(x) scanf("%d", &x)
#define scl(x) scanf("%lld",&x);
#define pri(x) printf("%d\n", x)
#define prl(x) printf("%lld\n",x);
#define clr(u) for(int i = 0; i <= n ; i ++) u[i].clear();
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pii pair#define pil pair#define pll pair#define pb push_back
#define fi first
#define se second
using
namespace
std;
typedef vector
vi;const
double eps = 1e-9
;const
int maxn = 2010
;const
int inf = 0x3f3f3f3f
;const
int mod = 1e9 + 7
; inline
intread()
intn,m;
struct
tree
}tree[maxn * 60
];int
tot;
void check(int &t)
void add(int &t,ll l,ll r,int
v)else
tree[t].lazy =v;
}void pushdown(int&t,ll l,ll r)
void pushup(int
t,ll l,ll r)
tree[t].rsum =tree[rs].rsum;
if(tree[rs].rsum == r -m)
}void update(int &t,int q1,int q2,ll l,ll r,int
v) pushdown(t,l,r);
ll m = (l + r) >> 1
;
if(q1 <=m) update(tree[t].lt,q1,q2,l,m,v);
if(q2 > m) update(tree[t].rt,q1,q2,m + 1
,r,v);
pushup(t,l,r);
}ll left,right;
void query(int
t,ll l,ll r)
check(tree[t].lt); check(tree[t].rt);
int ls = tree[t].lt; int rs =tree[t].rt;
ll m = (l + r) >> 1
;
if(tree[ls].sum ==tree[t].sum) query(ls,l,m);
else
if(tree[rs].sum == tree[t].sum) query(rs,m + 1
,r);
else }
intmain()
else
}if(!tree[root].sum)
query(root,l,r);
printf(
"%lld %lld\n
",left,right);
}return0;
}
HDU1199 離散化線段樹
題目大意 一段長度未知的線段,一種操作 a b c 表示區間 a,b 要塗的顏色,c w塗白色,c b塗黑色,問你最長的白色區間段時多長。解題思路 就快去南京邀請賽了,最近做題超沒狀態,cf rating一直掉,這麼簡單的線段樹離散化居然搞了我乙個晚上,糾結。開始用線段樹區間合併的方法做,wa到死,...
HDU 3333 線段樹 離散化
只查詢區間不同的數的和 思路好題 對查詢離線 不斷的往每個位置插值 並把前面位置的值置為0 每查到乙個右端點 查詢一下 等價操作的轉換 離散化一下 include define mem a,b memset a,b,sizeof a define lson root 1 define rson ro...
離散化 線段樹
題目 分析 每次1操作會往序列底加first個second,first 和 second 都是最大1e9的資料,每次2操作詢問序列中第first到第second個數的和 一開始就感覺有點像線段樹,輸入資料太大我們可以離線處理把資料離散化下,然後扔到線段樹上,維護兩個陣列 sum 區間數的值的和 nu...