- -比赛时用了很奇怪的方法 然后最后评判TLE了。。。。 赛后中规中矩的用线段树过了
#include#include #include #include using namespace std;int kn[300005], len[300005];struct segTree{ int l, r, va;} seg[300005<<2];void build(int l,int r,int rt){ seg[rt].l=l, seg[rt].r=r, seg[rt].va=0; if(l==r) return; int m=(l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1);};void change(int l,int r,int rt,int va){ int tl=seg[rt].l, tr=seg[rt].r; if(seg[rt].va) return; if(tl==tr) { seg[rt].va=va; return; } int m=(tl+tr)>>1; if(l<=m) change(l,r,rt<<1,va); if(r>m) change(l,r,rt<<1|1,va); if(seg[rt<<1].va&&seg[rt<<1|1].va) seg[rt].va=1;}void cg(int x,int rt){ int tl=seg[rt].l, tr=seg[rt].r; if(tl==tr) { seg[rt].va=0; return; } int m=(tl+tr)>>1; if(x<=m) cg(x,rt<<1); if(x>m) cg(x,rt<<1|1); seg[rt].va=0;}void update(int l,int r,int rt){ int tl=seg[rt].l, tr=seg[rt].r; if(tl==tr) { printf("%d ",seg[rt].va); return; } update(l,r,rt<<1); update(l,r,rt<<1|1);}int main(){ int n, m, i, j, l, r, x; scanf("%d%d",&n,&m); build(1,n,1); for(i=0; i