本文共 1188 字,大约阅读时间需要 3 分钟。
题目分析:线段树区间更新+离散化
代码如下:
# include # include # include # include # include # include # include # include # include # include # include using namespace std;# define LL long longconst int N=10000;const int INF=1<<30;const double oo=1e20;const double eps=1e-20;int x[N+5],y[N+5];vector v;map mp;int lazy[N*8+5];int tr[N*8+5];set s;void pushDown(int o,int l,int r){ if(lazy[o]!=-1){ lazy[o<<1]=lazy[o<<1|1]=lazy[o]; tr[o<<1]=tr[o<<1|1]=lazy[o]; lazy[o]=-1; }}void build(int o,int l,int r){ tr[o]=-1; lazy[o]=-1; if(l==r) return ; int mid=l+(r-l)/2; build(o<<1,l,mid); build(o<<1|1,mid+1,r);}void update(int o,int l,int r,int L,int R,int val){ if(L<=l&&r<=R){ tr[o]=lazy[o]=val; }else{ pushDown(o,l,r); int mid=l+(r-l)/2; if(L<=mid) update(o<<1,l,mid,L,R,val); if(R>mid) update(o<<1|1,mid+1,r,L,R,val); }}void query(int o,int l,int r){ if(l==r){ if(tr[o]!=-1) s.insert(tr[o]); }else{ pushDown(o,l,r); int mid=l+(r-l)/2; query(o<<1,l,mid); query(o<<1|1,mid+1,r); }}int solve(int m,int n){ build(1,1,m); for(int i=0;i
转载于:https://www.cnblogs.com/20143605--pcx/p/5536191.html