Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define SZ(X) ((int)(X).size())
- #define ALL(X) (X).begin(), (X).end()
- #define REP(I, N) for (int I = 0; I < (N); ++I)
- #define REPP(I, A, B) for (int I = (A); I < (B); ++I)
- #define RI(X) scanf("%d", &(X))
- #define RII(X, Y) scanf("%d%d", &(X), &(Y))
- #define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
- #define DRI(X) int (X); scanf("%d", &X)
- #define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
- #define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
- #define RS(X) scanf("%s", (X))
- #define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
- #define MP make_pair
- #define PB push_back
- #define MS0(X) memset((X), 0, sizeof((X)))
- #define MS1(X) memset((X), -1, sizeof((X)))
- #define LEN(X) strlen(X)
- #define PII pair<int,int>
- #define VI vector<int>
- #define VPII vector<pair<int,int> >
- #define PLL pair<long long,long long>
- #define VPLL vector<pair<long long,long long> >
- #define F first
- #define S second
- typedef long long LL;
- using namespace std;
- const int MOD = 1e9+7;
- const int SIZE = 1e6+1;
- VPLL pp;
- int BIT[SIZE];
- void ins(int x,int v){
- for(;x<SIZE;x+=x&-x)BIT[x]=max(BIT[x],v);
- }
- int qq(int x){
- int res=0;
- for(;x;x-=x&-x)res=max(BIT[x],res);
- return res;
- }
- int LIS(LL a[],int N){
- static LL d[SIZE];
- REP(i,N)
- d[i]=a[i];
- sort(d,d+N);
- int m=unique(d,d+N)-d;
- REP(i,N){
- a[i]=lower_bound(d,d+m,a[i])-d+1;
- }
- int an=0;
- REP(i,N){
- int me=qq(a[i])+1;
- an=max(an,me);
- ins(a[i],me);
- }
- return an;
- }
- LL a[SIZE];
- int main(){
- DRII(n,D);
- REP(i,n){
- DRII(x,t);
- pp.PB(MP(x+D*(LL)t,-x+D*(LL)t));
- if(pp.back().F<0||pp.back().S<0)pp.pop_back();
- }
- sort(ALL(pp));
- REP(i,SZ(pp))a[i]=pp[i].S;
- printf("%d\n",LIS(a,SZ(pp)));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment