diff options
| author | Aditya Naik | 2018-05-11 17:06:26 -0400 |
|---|---|---|
| committer | Aditya Naik | 2018-05-11 17:06:26 -0400 |
| commit | 240b65a7e9c514acde1cb33b24053cdcac06c7e8 (patch) | |
| tree | d1c6c1ccf6c1f01fed5a38f7e7d49473b0ce826c | |
| parent | f08d0c462d3754297632dbf6c65bff47e8c65045 (diff) | |
| parent | 4570bdbae3c2d59031eed95b7e89c00ac176be52 (diff) | |
Merge branch 'buddies_new'
done with buddies
done with buddies# Please enter a commit message to explain why this merge is necessary,
done with buddies# especially if it merges an updated upstream into a topic branch.
done with buddiedone with buddiedone with buddiesss#
| -rw-r--r-- | 12356/buddies.c | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/12356/buddies.c b/12356/buddies.c index 43cabf1..e93fc98 100644 --- a/12356/buddies.c +++ b/12356/buddies.c @@ -4,36 +4,59 @@ int main(){ int s, r; scanf("%d %d", &s, &r); while(s>0){ - int line[100000]={0}, i; - for(i=0; i<s; i++) - line[i]=1; - - int left, right; + int left, right, i; + int gapsl[100000], gapsr[100000], gap_index=0; + while(r--){ - int left_seek, right_seek; + int left_seek, right_seek, curr_gapindex; scanf("%d %d", &left, &right); + + left--; right--; /* adjust for 0 index */ - for(i=left-1; i<right; i++) - line[i]=0; - - for(left_seek=left-1; line[left_seek]==0 - && left_seek>0; left_seek--); - for(right_seek=right-1; line[right_seek]==0 - && right_seek<s; right_seek++); + curr_gapindex = gap_index++; + gapsl[curr_gapindex]=left; + gapsr[curr_gapindex]=right; + + left_seek=left-1; + right_seek=right+1; - if(left_seek<=0 && line[left_seek]==0) + int gap_collision=0; + for(i=0; i<=curr_gapindex; i++){ + while(gapsl[i]<=left_seek && gapsr[i]>=left_seek){ + left_seek--; + gap_collision=1; + } + if(gap_collision){ + i=-1; + gap_collision=0; + } + } + if(left_seek<0) printf("* "); else printf("%d ", left_seek+1); - if(right_seek==s && line[right_seek]==0) + gap_collision=0; + for(i=0; i<=curr_gapindex; i++){ + while(gapsr[i]>=right_seek && gapsl[i]<=right_seek){ + right_seek++; + gap_collision=1; + } + if(gap_collision){ + i=-1; + gap_collision=0; + } + } + if(right_seek>=s) printf("*\n"); else printf("%d\n", right_seek+1); } + printf("-\n"); scanf("%d %d", &s, &r); } + return 0; } |
