神奇!输出-9999

P1382 楼房

```cpp #include<cstdio> #include<algorithm> #include<cstring> #define lson o<<1 #define rson o<<1|1 #define mid (l+r)/2 using namespace std; struct Node { int left; int right; int height; }a[100005]; struct Tree { int setv; bool flag; }tree[400005]; struct Place { int place; int lorr; int x,y; }p[200005]; int n,num,h[200005],rank[200005],ans[400005][2];//rank[i]代表离散后的i在原来的数据中是几,h[i]代表离散后i的高度 bool cmp1(Place x,Place y) { return x.x<y.x; } bool cmp2(Node x,Node y) { return x.height<y.height; } void pushdown(int o,int len) { if(len==1)return; if(tree[o].flag) { tree[lson].flag=1; tree[rson].flag=1; tree[lson].setv=tree[o].setv; tree[rson].setv=tree[o].setv; tree[o].flag=0; } } void set(int o,int l,int r,int from,int to,int value)//l,r是管辖区间,from,to是更新的区间 { if(l>=from&&r<=to) { tree[o].flag=1; tree[o].setv=value; return; } pushdown(o,r-l+1); if(from<=mid)set(lson,l,mid,from,to,value); if(to>mid)set(rson,mid+1,r,from,to,value); } void work(int o,int l,int r)//work用来计算h数组 { if(tree[o].flag) { for(int i=l;i<=r;i++) h[i]=tree[o].setv; return; } if(l==r)return; work(lson,l,mid); work(rson,mid+1,r); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&a[i].height,&a[i].left,&a[i].right); p[++num].x=a[i].left; p[num].lorr=0; p[num].place=i; p[++num].x=a[i].right; p[num].lorr=1; p[num].place=i; } sort(p+1,p+num+1,cmp1); rank[1]=p[1].x; p[1].y=1; int now=1; for(int i=2;i<=num;i++) { if(p[i].x==p[i-1].x) { p[i].y=p[i-1].y; continue; } p[i].y=++now; rank[now]=p[i].x; } for(int i=1;i<=num;i++) { if(p[i].lorr==0) a[p[i].place].left=p[i].y; else a[p[i].place].right=p[i].y; }//到这里是离散化 sort(a+1,a+n+1,cmp2); // for(int i=1;i<=now;i++) // printf("%d:%d\n",i,rank[i]); for(int i=1;i<=n;i++) set(1,1,now,a[i].left,a[i].right-1,a[i].height); work(1,1,now); num=0; for(int i=1;i<=now;i++) { if(h[i]!=h[i-1]) { ans[++num][0]=rank[i]; ans[num][1]=h[i-1]; ans[++num][0]=rank[i]; ans[num][1]=h[i]; } }//勾出轮廓线 printf("%d\n",num); for(int i=1;i<=num;i++) printf("%d %d\n",ans[i][0],ans[i][1]); return 0; }```
by wucstdio @ 2018-04-20 19:28:14


@wucstdio数组开小了
by Zekrom @ 2019-07-08 15:39:52


开大亲测过了 @[wucstdio](/space/show?uid=54214)
by Zekrom @ 2019-07-08 15:40:16


谢谢,已AC。
by wucstdio @ 2019-07-08 21:49:22


|