답안 #12140

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
12140 2014-12-21T08:50:41 Z dohyun0324 사다리꼴 (balkan11_trapezoid) C++
16 / 100
146 ms 8152 KB
#include<stdio.h>
#include<algorithm>
using namespace std;
int dap,sum,t=1,w,n,tree[300010],cnt[300010],d[200010],d2[200010];
struct data
{
    int x1,y1,x2,y2;
    bool operator<(const data&r)const{
        return y1<r.y1;
    }
}a[100010];
struct data2
{
    int x,p;
    bool operator<(const data2&r)const{
        return x<r.x;
    }
}arr[200010];
void ins(int x,int gap,int i)
{
    int p=x+t-1;
    while(p>0)
    {
        if(tree[p]==gap) cnt[p]+=d2[i];
        if(tree[p]<gap) cnt[p]=d2[i];
        tree[p]=max(tree[p],gap);
        p/=2;
    }
}
int query(int a,int b,int x,int y,int k)
{
    if(a<=x && y<=b) return tree[k];
    if(a>y || x>b) return 0;
    return max(query(a,b,x,(x+y)/2,k*2),query(a,b,(x+y)/2+1,y,k*2+1));
}
int query2(int a,int b,int x,int y,int k)
{
    int s1,s2;
    if(a<=x && y<=b) return cnt[k];
    if(a>y || x>b) return 0;
    s1=query(a,b,x,(x+y)/2,k*2); s2=query(a,b,(x+y)/2+1,y,k*2+1);
    if(s1==s2) return query2(a,b,x,(x+y)/2,k*2)+query2(a,b,(x+y)/2+1,y,k*2+1);
    else if(s1>s2) return query2(a,b,x,(x+y)/2,k*2);
    else return query2(a,b,(x+y)/2+1,y,k*2+1);
}
int main()
{
    int i,j,p=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d %d %d %d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
        w++; arr[w].x=a[i].x2; arr[w].p=i*2; w++; arr[w].x=a[i].y2; arr[w].p=i*2+1;
    }
    sort(arr+1,arr+w+1);
    for(i=1;i<=w;i++)
    {
        if(arr[i].p%2==0) a[arr[i].p/2].x2=i;
        else a[arr[i].p/2].y2=i;
    }
    sort(a+1,a+n+1);
    for(i=1;;i++){if(t>=w) break; t*=2;}
    for(i=1;i<=n;i++)
    {
        for(j=p;j<=n;j++)
        {
            if(a[i].x1<a[j].y1) break;
            ins(a[j].y2,d[j],j);
        }
        p=j;
        d[i]=query(1,a[i].x2-1,1,t,1)+1;
        d2[i]=query2(1,a[i].x2-1,1,t,1);
        if(d[i]==1) d2[i]=1;
    }
    for(i=1;i<=n;i++)
    {
        if(dap==d[i]) sum+=d2[i];
        if(dap<d[i])
        {
            dap=d[i];
            sum=d2[i];
        }
    }
    printf("%d %d",dap,sum);
    return 0;
}

Compilation message

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:49:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
                   ^
trapezoid.cpp:52:65: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d %d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
                                                                 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 8152 KB Output is correct
2 Correct 0 ms 8152 KB Output is correct
3 Incorrect 0 ms 8152 KB Output isn't correct
4 Partially correct 0 ms 8152 KB Partially correct
5 Incorrect 3 ms 8152 KB Output isn't correct
6 Incorrect 3 ms 8152 KB Output isn't correct
7 Partially correct 3 ms 8152 KB Partially correct
8 Incorrect 6 ms 8152 KB Output isn't correct
9 Incorrect 16 ms 8152 KB Output isn't correct
10 Partially correct 36 ms 8152 KB Partially correct
11 Incorrect 49 ms 8152 KB Output isn't correct
12 Incorrect 109 ms 8152 KB Output isn't correct
13 Incorrect 146 ms 8152 KB Output isn't correct
14 Runtime error 63 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Runtime error 63 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
16 Runtime error 59 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
17 Runtime error 69 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
18 Runtime error 93 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
19 Runtime error 79 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
20 Runtime error 73 ms 8152 KB Execution killed with signal 11 (could be triggered by violating memory limits)