#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define DEBUG(x)
int n;
struct Prz{
int c,d;
void zw(Prz p) { c=max(c,p.c); d=min(d,p.d); }
};
struct Ucz{
Ucz():maks(0),podz(0){}
unsigned int maks,podz;
Prz p;
void maksum(Ucz u) {
if(maks > u.maks+1)
return;
if(maks == u.maks+1) {
podz+= u.podz;
podz %=1000000007;
return;
}
maks=u.maks+1;
podz = u.podz;
}
};
vector<Ucz> wej;
void oblicz(Ucz &u) {
Prz p=u.p;
int ile = 0;
int last = wej.size()-1;
for(int i = last; i >= last - p.d && i>=0; i--) {
DEBUG(printf("i; %d \n", i));
ile++;
Ucz ui = wej[i];
if( p.c <= ile && ile<= p.d) {
u.maksum(ui);
}
if(ile > p.d)
break;
p.zw(ui.p);
ui.p=p;
}
}
void print(Ucz &u) {
printf("(%d, %d) %d %d\n", u.p.c,u.p.d, u.maks, u.podz);
}
int main() {
scanf("%d",&n);
Ucz u0;
u0.podz=1;
wej.push_back(u0);
while(n--) {
Ucz u;
scanf("%d %d",&u.p.c,&u.p.d);
oblicz(u);
DEBUG(print(u));
wej.push_back(u);
//cerr << "n: " << n << "\n";
}
if(wej.back().maks == 0) printf("NIE\n");
else printf("%d %d\n", wej.back().maks, wej.back().podz);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <iostream> #include <cstdio> #include <vector> using namespace std; #define DEBUG(x) int n; struct Prz{ int c,d; void zw(Prz p) { c=max(c,p.c); d=min(d,p.d); } }; struct Ucz{ Ucz():maks(0),podz(0){} unsigned int maks,podz; Prz p; void maksum(Ucz u) { if(maks > u.maks+1) return; if(maks == u.maks+1) { podz+= u.podz; podz %=1000000007; return; } maks=u.maks+1; podz = u.podz; } }; vector<Ucz> wej; void oblicz(Ucz &u) { Prz p=u.p; int ile = 0; int last = wej.size()-1; for(int i = last; i >= last - p.d && i>=0; i--) { DEBUG(printf("i; %d \n", i)); ile++; Ucz ui = wej[i]; if( p.c <= ile && ile<= p.d) { u.maksum(ui); } if(ile > p.d) break; p.zw(ui.p); ui.p=p; } } void print(Ucz &u) { printf("(%d, %d) %d %d\n", u.p.c,u.p.d, u.maks, u.podz); } int main() { scanf("%d",&n); Ucz u0; u0.podz=1; wej.push_back(u0); while(n--) { Ucz u; scanf("%d %d",&u.p.c,&u.p.d); oblicz(u); DEBUG(print(u)); wej.push_back(u); //cerr << "n: " << n << "\n"; } if(wej.back().maks == 0) printf("NIE\n"); else printf("%d %d\n", wej.back().maks, wej.back().podz); return 0; } |
English