Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>int f[404000],lz[404000];using namespace std;int find(int a,int b,int l,int r,int root){if (a<=l&&r<=b) {// printf("%d %d %d\n",l,r,lz[root]);return lz[root];}int mid=(l+r)>>1,t1=0,t2=0,t=0;if (b>=l&&a<=r) t=f[root];if (a<=mid) t1=find(a,b,l,mid,root<<1);if (b>mid) t2=find(a,b,mid+1,r,root<<1|1);t = max(t,max(t1,t2));// printf("%d %d %d %d %d %d\n",a,l,r,b,t,f[root]);return t;}void cl(int a,int b,int l,int r,int root,int t){if (a<=l&&r<=b) {// printf("````%d %d %d %d\n",l,r,root,t);f[root]=t;lz[root]=t;return;}int mid=(l+r)>>1;if (a<=mid) cl(a,b,l,mid,root<<1,t);