企业网站开发与管理,制作企业网站的代码,应用公园app免费制作,重庆网站设计好的公司正题 题目大意
若干个区间操作l,rl,rl,r 让答案增加(lr)∗max{ai}(i∈[l..r])(lr)*max\{a_i\}(i\in[l..r])(lr)∗max{ai}(i∈[l..r]) 并把最大的数变为0 解题思路
线段树#xff0c;上传最大值时多上传一个位置#xff0c;然后单点修改。 codecodecode
#includecstd…正题 题目大意
若干个区间操作l,rl,rl,r 让答案增加(lr)∗max{ai}(i∈[l..r])(lr)*max\{a_i\}(i\in[l..r])(lr)∗max{ai}(i∈[l..r]) 并把最大的数变为0 解题思路
线段树上传最大值时多上传一个位置然后单点修改。 codecodecode
#includecstdio
#includealgorithm
using namespace std;
const int N200100,XJQ2011;
struct treenode{int num,val,l,r;
}t[N*4];
int n,m,ans,sum,num;
void Merge(int k)
{if(t[k*2].valt[k*21].val)t[k].valt[k*2].val,t[k].numt[k*2].num;else t[k].valt[k*21].val,t[k].numt[k*21].num;
}
void build(int k,int l,int r)
{t[k].ll;t[k].rr;if(lr){scanf(%d,t[k].val);t[k].numt[k].l;return;}int mid(lr)/2;build(k*2,l,mid);build(k*21,mid1,r);Merge(k);
}
void ask(int k,int l,int r)
{if(t[k].llt[k].rr){if(t[k].valans) return;anst[k].val;numt[k].num;return;}int mid(t[k].lt[k].r)/2;if(rmid) ask(k*2,l,r);else if(lmid) ask(k*21,l,r);else ask(k*2,l,mid),ask(k*21,mid1,r);
}
void change(int k,int x)
{if(t[k].lt[k].r){t[k].val0;return;}int mid(t[k].lt[k].r)/2;if(xmid) change(k*2,x);else change(k*21,x);Merge(k);
}
int main()
{//freopen(data.in,r,stdin);scanf(%d%d,n,m);build(1,1,n);for(int i1;im;i){int l,r;scanf(%d%d,l,r);ans0;ask(1,l,r);(sumans*((lr)%XJQ)%XJQ)%XJQ;change(1,num);}printf(%d,sum);
}