六安服装网站建设地址聚合页做的比较好的教育网站
六安服装网站建设地址,聚合页做的比较好的教育网站,wordpress空间推荐,叶县建设局网站传送门 将曼哈顿距离转换成切比雪夫距离#xff0c;现在就是求max(∣x1−x2∣,∣y1−y2∣)max(|x_1-x_2|,|y_1-y_2|)max(∣x1−x2∣,∣y1−y2∣)#xff0c;显然我们可以将x,yx,yx,y分开考虑#xff0c;下面以xxx为例。
考虑一段区间内不同门派的最大值和最小值现在就是求max(∣x1−x2∣,∣y1−y2∣)max(|x_1-x_2|,|y_1-y_2|)max(∣x1−x2∣,∣y1−y2∣)显然我们可以将x,yx,yx,y分开考虑下面以xxx为例。
考虑一段区间内不同门派的最大值和最小值我们可以维护这个区间的最大值和最小值以及与最大值门派不同的次大值和与最小值门派不同的次小值这样就不难得出答案了。
#includebits/stdc.h
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define Mid (tr[u].ltr[u].r1)
#define pb push_back
using namespace std;const int N1000010,INF0x3f3f3f3f,mod1e97;
typedef long long LL;int n,m;
int a[N],x[N],y[N],z[N];/*
最大值 与最大值门派不同的次大值
最小值 与最小值门派不同的次小值
*/
struct Point {LL val,id;
};
vectorPointv;bool cmp1(Point a,Point b) {return a.valb.val;
}bool cmp2(Point a,Point b) {return a.valb.val;
}struct Seg {struct Node {int l,r;LL maxid[2],minid[2];LL maxval[2],minval[2];}tr[N2];void update(Node u,Node ls,Node rs) {//最大值if(ls.maxval[0]rs.maxval[0]) swap(ls,rs);u.maxval[0]rs.maxval[0];u.maxid[0]rs.maxid[0];//次大值v.clear();v.push_back({ls.maxval[0],ls.maxid[0]});v.push_back({ls.maxval[1],ls.maxid[1]});v.push_back({rs.maxval[1],rs.maxid[1]});sort(v.begin(),v.end(),cmp1);u.maxval[1]-1e9-1;u.maxid[1]0;for(auto x:v) if(x.id!u.maxid[0]x.id!0) {u.maxval[1]x.val;u.maxid[1]x.id;break;}//最小值if(ls.minval[0]rs.minval[0]) swap(ls,rs);u.minval[0]rs.minval[0];u.minid[0]rs.minid[0];//次小值v.clear();v.push_back({ls.minval[0],ls.minid[0]});v.push_back({ls.minval[1],ls.minid[1]});v.push_back({rs.minval[1],rs.minid[1]});sort(v.begin(),v.end(),cmp2);u.minval[1]1e91;u.minid[1]0;for(auto x:v) if(x.id!u.minid[0]x.id!0) {u.minval[1]x.val;u.minid[1]x.id;break;}}void pushup(int u) {update(tr[u],tr[L],tr[R]);}void build(int u,int l,int r) {tr[u]{l,r};if(lr) {tr[u].maxid[0]tr[u].minid[0]z[l];tr[u].maxid[1]tr[u].minid[1]0;tr[u].maxval[0]tr[u].minval[0]a[l];tr[u].maxval[1]-1e9-1;tr[u].minval[1]1e91;return;}build(L,l,Mid); build(R,Mid1,r);pushup(u);}void change_val(int u,int pos,int val) {if(tr[u].ltr[u].r) {tr[u].maxval[0]val;tr[u].minval[0]val;return;}if(posMid) change_val(L,pos,val);else change_val(R,pos,val);pushup(u);}void change_id(int u,int pos,int val) {if(tr[u].ltr[u].r) {tr[u].maxid[0]val;tr[u].minid[0]val;return;}if(posMid) change_id(L,pos,val);else change_id(R,pos,val);pushup(u);}Node query(int u,int l,int r) {if(tr[u].lltr[u].rr) return tr[u];if(rMid) return query(L,l,r);else if(lMid) return query(R,l,r);else {Node ans,ls,rs;lsquery(L,l,r); rsquery(R,l,r);update(ans,ls,rs);return ans;}}LL get_ans(int l,int r) {Node uquery(1,l,r);LL ans0;for(int i0;i2;i) {for(int j0;j2;j) {if(u.maxid[i]!u.minid[j]u.maxid[i]!0u.minid[j]!0) {ansmax(ans,abs(u.maxval[i]-u.minval[j]));}}}return ans;}
}seg[2];void solve() {scanf(%d%d,n,m);for(int i1;in;i) scanf(%d%d%d,x[i],y[i],z[i]);for(int i1;in;i) a[i]x[i]y[i];seg[0].build(1,1,n);for(int i1;in;i) a[i]x[i]-y[i];seg[1].build(1,1,n);while(m--) {int op; scanf(%d,op);if(op1) {int k,x,y;scanf(%d%d%d,k,x,y);seg[0].change_val(1,k,xy);seg[1].change_val(1,k,x-y);} else if(op2) {int k,c;scanf(%d%d,k,c);seg[0].change_id(1,k,c);seg[1].change_id(1,k,c);} else {int l,r; scanf(%d%d,l,r);printf(%lld\n,max(seg[0].get_ans(l,r),seg[1].get_ans(l,r)));}}
}int main() {int _; scanf(%d,_);for(int i1;i_;i) {printf(Case #%d:\n,i);solve();}return 0;
}
/*
1
2 1
1 1 1
1 1 2
3 1 26 2
hahaha
*/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90491.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!