CODEFORCES ROUND #374 (DIV. 2) E

题目大意

暂无

题目解法

暂无

RTFC

#include <cstdio>
#include <cstring>
int l, n, p, t;
int seg[100010][2];
inline int max(int a, int b) { return a > b ? a : b; }
int getPos(int x)
{
    int l = 0, r = n, m;
    while (l < r)
    {
        m = (l + r) >> 1;
        if (x >= seg[m][0] && x <= seg[m][1])
            break;
        else if (x < seg[m][0])
            r = m;
        else
            l = m + 1;
    }
    return m;
}
int main()
{
    memset(seg, 0x3f3f3f3f, sizeof(seg));
    scanf("%d%d%d%d", &l, &n, &p, &t);
    for (int i = 0; i < n; i++)
        scanf("%d%d", &seg[i][0], &seg[i][1]);
    int cnt = 0, curcnt = 0;
    int posx = max(0, seg[0][0]), posid = getPos(0);
    while (posx <= l)
    {
        curcnt = (seg[posid][1] - posx) / p;
        cnt += curcnt;
        if (curcnt)
        {
            posx = posx + curcnt * p + t;
            posx = max(posx, seg[posid = getPos(posx)][0]);
        }
        else
            posx = seg[++posid][0];
    }
    printf("%d", cnt);
    return 0;
}