RT,TLE on #18,感觉和这篇题解没什么区别,求帮看看为什么会 T
代码很简单的
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FCC fclose(stdin),fclose(stdout)
#define mid ((l+r)>>1)
const int INF = 0x3f3f3f3f,N = 6e5+10;
inline ll read()
{
ll ret=0;char ch=' ',c=getchar();
while(!(c>='0'&&c<='9')) ch=c,c=getchar();
while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
return ch=='-'?-ret:ret;
}
int n,q,rt;
struct Segtree
{
int sum[N<<5],ls[N<<5],rs[N<<5];
int tot,laz[N<<5];
inline void add(int &k,int l,int r,int v)
{
if(!k) k=++tot;
laz[k]=v;
sum[k]=(r-l+1)*v;
// printf("sum[%d]: [%d,%d] = %d\n",k,l,r,sum[k]);
}
inline void pushdown(int k,int l,int r)
{
if(laz[k]==-1) return;
add(ls[k],l,mid,laz[k]);
add(rs[k],mid+1,r,laz[k]);
laz[k]=-1;
}
void modify(int &k,int l,int r,int x,int y,int v)
{
if(!k) k=++tot;
if(x<=l&&r<=y) return add(k,l,r,v);
pushdown(k,l,r);
if(x<=mid) modify(ls[k],l,mid,x,y,v);
if(y>mid) modify(rs[k],mid+1,r,x,y,v);
sum[k]=sum[ls[k]]+sum[rs[k]];
}
}str;
void work()
{
n=read(),q=read();
memset(str.laz,-1,sizeof(str.laz));
while(q--)
{
int l=read(),r=read(),op=read();
if(op==1) str.modify(rt,1,n,l,r,1);
else str.modify(rt,1,n,l,r,0);
printf("%d\n",n-str.sum[rt]);
}
return;
}
int main()
{
work();
return 0;
}