坑是看是否相同
解决后还是不对
如果sum[o]>=0直接判断,就是wa
看别人写到l==r 就是对的
不知道为什么
代码如下
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int x,y,c;
int num[8005];
int sum[8005*4];
int last;
void Push_down(int o,int l,int r)
{
if(sum[o]>=0) {
sum[o<<1]=sum[o<<1|1]=sum[o];
sum[o]=-1;
}
}
void Update(int o,int l,int r)
{
if(x<=l&&r<=y) {
sum[o]=c; return ;
}
Push_down(o,l,r);
int mid=l+r>>1;
if(x<=mid) {
Update(o<<1,l,mid);
}
if(y>mid) {
Update(o<<1|1,mid+1,r);
}
}
void Query(int o,int l,int r)
{
if(l==r) {
if(sum[o]>=0&&sum[o]!=last) {
num[sum[o]]++;
}
last=sum[o];
return ;
}
Push_down(o,l,r);
int mid=l+r>>1;
Query(o<<1,l,mid);
Query(o<<1|1,mid+1,r);
}
int main()
{
int n;
while(~scanf("%d",&n)) {
memset(num,0,sizeof(num));
memset(sum,-1,sizeof(sum));
for(int i=0;i<n;i++) {
scanf("%d%d%d",&x,&y,&c);
x++;
Update(1,1,8000);
}
last=-1;
Query(1,1,8000);
for(int i=0;i<=8000;i++) {
if(num[i]) {
printf("%d %d\n",i,num[i]);
}
}
printf("\n");
}
}