#include #include #include #include using namespace std; typedef long long lint; typedef vectorvi; typedef pairpii; #define rep(i,n)for(int i=0;i<(int)(n);++i) const int W=300; const int N=W*W; vector coord; map tbl; lint u[N]; struct iroha{ lint s,e,m; iroha():s(0),e(0),m(0){} iroha(lint s,lint e,lint m):s(s),e(e),m(m){} iroha operator*(const iroha &o){ if(m==-1&&o.m==-1){ return iroha(s+o.s,e+o.e,-1); } if(m==-1){ return iroha(s+o.s,o.e,max(o.m,m+o.s)); } if(o.m==-1){ return iroha(s,e+o.s,max(m,e+o.s)); } return iroha(s,o.e,max(m,max(o.m,e+o.s))); } }; iroha meg[W]; int pop[W]; void tap(int b){ iroha acc(0,0,-1); rep(i,W){ if(u[b*W+i]){ lint dif=coord[b*W+i+1]-coord[b*W+i]; acc=acc*iroha(dif,dif,-1); }else{ acc=acc*iroha(0,0,0); } } meg[b]=acc; } void update_range(int l,int r){ int b=l/W; if(pop[b]==W)return; for(int i=l;irb){ update_range(l,r); }else{ update_range(l,lb*W); update_range(rb*W,r); for(int i=lb;irb){ res=query_range(l,r); }else{ res=query_range(l,lb*W); for(int i=lb;i>d>>q; vector a(q),b(q); rep(i,q){ cin>>a[i]>>b[i]; b[i]++; coord.push_back(a[i]); coord.push_back(b[i]); } coord.push_back(0); coord.push_back(d); sort(coord.begin(),coord.end()); coord.erase(unique(coord.begin(),coord.end()),coord.end()); rep(i,coord.size())tbl[coord[i]]=i; vi ca(q),cb(q); rep(i,q){ ca[i]=tbl[a[i]]; cb[i]=tbl[b[i]]; } rep(i,q){ update(ca[i],cb[i]); cout<