Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * main.c
- *
- * Created on: 26 окт. 2014 г.
- * Author: ulgish
- */
- #include <stdio.h>
- #include <stdlib.h>
- typedef unsigned char byte;
- #define P_OPEN 0
- #define P_QUERY 1
- #define P_CLOSE 2
- typedef struct{
- int x;
- byte pr;
- int index;
- }point;
- int p_cmp(const void* key1, const void* key2){
- point* p1 = (point*)key1;
- point* p2 = (point*)key2;
- if (p1->x < p2->x){
- return -1;
- }
- if (p1->x > p2->x){
- return 1;
- }
- if (p1->pr < p2->pr){
- return -1;
- }
- if (p1->pr > p2->pr){
- return 1;
- }
- return 0;
- }
- int main(){
- int N,M;
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf("%d %d", &N, &M);
- point* p = (point*) calloc(N*2+M, sizeof(point));
- int* ans = (int*) calloc(M, sizeof(int));
- //c - current count of points.
- //l,r - first and second range of interval
- int i,l,r,c = 0;
- for (i = 0; i < N; i++){
- scanf("%d %d", &l, &r);
- p[c].x = l;
- c++;
- p[c].x = r;
- if (l < r){
- p[c].pr = P_CLOSE;
- p[c-1].pr = P_OPEN;
- }else{
- p[c-1].pr = P_CLOSE;
- p[c].pr = P_OPEN;
- }
- c++;
- }
- for (i = 0; i < M; i++){
- scanf("%d", &l);
- p[c].index = i;
- p[c].pr = P_QUERY;
- p[c].x = l;
- c++;
- }
- qsort(p, c, sizeof(point), p_cmp);
- int tmp = 0;
- for (i = 0; i < c; i++){
- switch (p[i].pr) {
- case P_OPEN:
- tmp++;
- break;
- case P_CLOSE:
- tmp--;
- break;
- default:
- ans[p[i].index] = tmp;
- break;
- }
- }
- for (i = 0; i < M; i++){
- printf("%d ", ans[i]);
- }
- fclose(stdout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement