# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
20394 |
2017-02-10T17:46:43 Z |
admin |
초음속철도 (OJUZ11_rail) |
C++14 |
|
946 ms |
25176 KB |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <math.h>
#include <assert.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <string>
#include <functional>
#include <vector>
#include <deque>
#include <utility>
#include <bitset>
#include <limits.h>
#include <time.h>
#include <functional>
#include <numeric>
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
typedef double lf;
typedef unsigned int uint;
typedef long double llf;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
#define debug(format, ...) printf(format, __VA_ARGS__);
const int M_ = 200500;
const int MAX_TREE_SIZE = 1<<20;
const int MOD = (ll)1e9 + 7;
class modint {
int v;
public:
modint (): v(0) { }
modint (ll v): v((v + MOD) % MOD) { }
bool operator== (modint x) { return v == x.v; }
bool operator!= (modint x) { return v != x.v; }
modint operator+ (modint x) { return v + x.v; }
modint operator- (modint x) { return v - x.v; }
modint operator* (modint x) { return (ll)v * x.v; }
modint& operator+= (const modint x) { return *this = (*this + x); }
modint& operator-= (const modint x) { return *this = (*this - x); }
modint& operator*= (const modint x) { return *this = (*this * x); }
int operator* () { return v; }
};
int F, N, M;
vector< pair<int, int> > intervals;
vector< int* > renum;
// 서브태스크:
// 1. n, m <= 20
// 2. n <= 20 (합쳐서 10점)
// 3. n <= 1000, m <= 1000
// 4. 포함 관계
// 5. n <= 500000, m <= 500000
namespace segtree {
struct node {
modint sum, mul, add;
node(modint sum = 0, modint mul = 1, modint add = 0): sum(sum), mul(mul), add(add) { }
};
vector<node> tree(MAX_TREE_SIZE + 1);
void spread (int idx, int nl, int nr) {
node& nd = tree[idx];
node& c1 = (nl == nr) ? tree[0] : tree[idx * 2];
node& c2 = (nl == nr) ? tree[0] : tree[idx * 2 + 1];
if(nd.mul != 1) {
nd.sum *= nd.mul;
for(auto &child : {&c1, &c2}) {
child->mul *= nd.mul;
child->add *= nd.mul;
}
nd.mul = 1;
}
if(nd.add != 0) {
nd.sum += nd.add * (nr - nl + 1);
for(auto &child : {&c1, &c2}) {
child->add += nd.add;
}
nd.add = 0;
}
}
modint update (int idx, int nl, int nr, int l, int r, char type, modint v) {
if(l > r) return 0;
node &nd = tree[idx];
spread(idx, nl, nr);
if(l <= nl && nr <= r) {
(type == '*' ? nd.mul : nd.add) = v;
spread(idx, nl, nr);
return nd.sum;
}
int nm = (nl + nr) >> 1;
nd.sum = 0;
if(l <= nm) nd.sum += update(idx*2, nl, nm, l, min(nm, r), type, v);
if(r > nm) nd.sum += update(idx*2+1, nm+1, nr, max(nm+1, l), r, type, v);
return nd.sum;
}
void multiply(int l, int r, modint v) {
update(1, 0, N, l, r, '*', v);
}
void add (int l, int r, modint v) {
update(1, 0, N, l, r, '+', v);
}
modint get (int idx, int nl, int nr, int x) {
spread(idx, nl, nr);
if(nl == nr) return tree[idx].sum;
int nm = (nl + nr) >> 1;
return (x <= nm) ?
get(idx*2, nl, nm, x) :
get(idx*2+1, nm+1, nr, x);
}
modint get(int x) {
return get(1, 0, N, x);
}
};
modint ans;
int main() {
assert(scanf("%d%d", &N, &M) == 2);
while(M > 200000);
intervals.resize(M);
renum.reserve(2*M);
for(auto &interval : intervals) {
assert(scanf("%d%d", &interval.first, &interval.second) == 2);
assert(1 <= interval.first && interval.first < interval.second && interval.second <= N);
renum.push_back(&interval.first);
renum.push_back(&interval.second);
}
F = 1;
renum.push_back(&F);
renum.push_back(&N);
sort(renum.begin(), renum.end(), [&](const int *a, const int *b){
return *a < *b;
});
for(int i = 0, k = 0; i < renum.size(); ) {
int j = i, v = *renum[i];
k += 1;
for(; j < renum.size() && *renum[j] == v; j++) *renum[j] = k;
i = j;
}
for(auto &interval : intervals) {
interval.second -= 1;
}
sort(intervals.begin(), intervals.end());
N -= 1;
segtree::add(0, 0, 1);
for(auto &interval : intervals) {
int l, r; tie(l, r) = interval;
modint v = segtree::get(l-1);
segtree::multiply(0, l-1, 2);
segtree::add(l, r, v);
segtree::multiply(r+1, N, 2);
}
ans = segtree::get(N);
printf("%d\n", *ans);
return 0;
}
Compilation message
rail.cpp: In function 'int main()':
rail.cpp:161:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0, k = 0; i < renum.size(); ) {
^
rail.cpp:164:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(; j < renum.size() && *renum[j] == v; j++) *renum[j] = k;
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
14232 KB |
Output is correct |
2 |
Correct |
0 ms |
14232 KB |
Output is correct |
3 |
Correct |
0 ms |
14232 KB |
Output is correct |
4 |
Correct |
0 ms |
14232 KB |
Output is correct |
5 |
Correct |
3 ms |
14232 KB |
Output is correct |
6 |
Correct |
0 ms |
14232 KB |
Output is correct |
7 |
Correct |
0 ms |
14232 KB |
Output is correct |
8 |
Correct |
3 ms |
14232 KB |
Output is correct |
9 |
Correct |
3 ms |
14232 KB |
Output is correct |
10 |
Correct |
0 ms |
14232 KB |
Output is correct |
11 |
Correct |
3 ms |
14232 KB |
Output is correct |
12 |
Correct |
3 ms |
14232 KB |
Output is correct |
13 |
Correct |
6 ms |
14232 KB |
Output is correct |
14 |
Correct |
0 ms |
14232 KB |
Output is correct |
15 |
Correct |
0 ms |
14232 KB |
Output is correct |
16 |
Correct |
3 ms |
14232 KB |
Output is correct |
17 |
Correct |
6 ms |
14232 KB |
Output is correct |
18 |
Correct |
3 ms |
14232 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
14232 KB |
Output is correct |
2 |
Correct |
0 ms |
14232 KB |
Output is correct |
3 |
Correct |
0 ms |
14232 KB |
Output is correct |
4 |
Correct |
0 ms |
14232 KB |
Output is correct |
5 |
Correct |
3 ms |
14232 KB |
Output is correct |
6 |
Correct |
0 ms |
14232 KB |
Output is correct |
7 |
Correct |
0 ms |
14232 KB |
Output is correct |
8 |
Correct |
3 ms |
14232 KB |
Output is correct |
9 |
Correct |
3 ms |
14232 KB |
Output is correct |
10 |
Correct |
0 ms |
14232 KB |
Output is correct |
11 |
Correct |
3 ms |
14232 KB |
Output is correct |
12 |
Correct |
3 ms |
14232 KB |
Output is correct |
13 |
Correct |
6 ms |
14232 KB |
Output is correct |
14 |
Correct |
0 ms |
14232 KB |
Output is correct |
15 |
Correct |
0 ms |
14232 KB |
Output is correct |
16 |
Correct |
3 ms |
14232 KB |
Output is correct |
17 |
Correct |
6 ms |
14232 KB |
Output is correct |
18 |
Correct |
3 ms |
14232 KB |
Output is correct |
19 |
Correct |
0 ms |
14232 KB |
Output is correct |
20 |
Correct |
3 ms |
14232 KB |
Output is correct |
21 |
Correct |
0 ms |
14232 KB |
Output is correct |
22 |
Correct |
0 ms |
14232 KB |
Output is correct |
23 |
Correct |
3 ms |
14232 KB |
Output is correct |
24 |
Correct |
0 ms |
14232 KB |
Output is correct |
25 |
Correct |
0 ms |
14232 KB |
Output is correct |
26 |
Correct |
0 ms |
14232 KB |
Output is correct |
27 |
Correct |
3 ms |
14232 KB |
Output is correct |
28 |
Correct |
3 ms |
14232 KB |
Output is correct |
29 |
Correct |
3 ms |
14232 KB |
Output is correct |
30 |
Correct |
3 ms |
14232 KB |
Output is correct |
31 |
Correct |
6 ms |
14232 KB |
Output is correct |
32 |
Correct |
0 ms |
14232 KB |
Output is correct |
33 |
Correct |
3 ms |
14232 KB |
Output is correct |
34 |
Correct |
0 ms |
14232 KB |
Output is correct |
35 |
Correct |
0 ms |
14232 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
14232 KB |
Output is correct |
2 |
Correct |
3 ms |
14232 KB |
Output is correct |
3 |
Correct |
3 ms |
14232 KB |
Output is correct |
4 |
Correct |
6 ms |
14584 KB |
Output is correct |
5 |
Correct |
329 ms |
25176 KB |
Output is correct |
6 |
Correct |
483 ms |
25176 KB |
Output is correct |
7 |
Correct |
503 ms |
25176 KB |
Output is correct |
8 |
Correct |
3 ms |
14232 KB |
Output is correct |
9 |
Correct |
459 ms |
24352 KB |
Output is correct |
10 |
Correct |
513 ms |
24896 KB |
Output is correct |
11 |
Correct |
269 ms |
21008 KB |
Output is correct |
12 |
Correct |
509 ms |
25176 KB |
Output is correct |
13 |
Correct |
516 ms |
24980 KB |
Output is correct |
14 |
Correct |
99 ms |
25176 KB |
Output is correct |
15 |
Correct |
486 ms |
25176 KB |
Output is correct |
16 |
Correct |
116 ms |
25176 KB |
Output is correct |
17 |
Correct |
519 ms |
25176 KB |
Output is correct |
18 |
Correct |
519 ms |
25176 KB |
Output is correct |
19 |
Correct |
529 ms |
25176 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
14232 KB |
Output is correct |
2 |
Correct |
0 ms |
14232 KB |
Output is correct |
3 |
Correct |
0 ms |
14232 KB |
Output is correct |
4 |
Correct |
0 ms |
14232 KB |
Output is correct |
5 |
Correct |
3 ms |
14232 KB |
Output is correct |
6 |
Correct |
0 ms |
14232 KB |
Output is correct |
7 |
Correct |
0 ms |
14232 KB |
Output is correct |
8 |
Correct |
3 ms |
14232 KB |
Output is correct |
9 |
Correct |
3 ms |
14232 KB |
Output is correct |
10 |
Correct |
0 ms |
14232 KB |
Output is correct |
11 |
Correct |
3 ms |
14232 KB |
Output is correct |
12 |
Correct |
3 ms |
14232 KB |
Output is correct |
13 |
Correct |
6 ms |
14232 KB |
Output is correct |
14 |
Correct |
0 ms |
14232 KB |
Output is correct |
15 |
Correct |
0 ms |
14232 KB |
Output is correct |
16 |
Correct |
3 ms |
14232 KB |
Output is correct |
17 |
Correct |
6 ms |
14232 KB |
Output is correct |
18 |
Correct |
3 ms |
14232 KB |
Output is correct |
19 |
Correct |
0 ms |
14232 KB |
Output is correct |
20 |
Correct |
3 ms |
14232 KB |
Output is correct |
21 |
Correct |
0 ms |
14232 KB |
Output is correct |
22 |
Correct |
0 ms |
14232 KB |
Output is correct |
23 |
Correct |
3 ms |
14232 KB |
Output is correct |
24 |
Correct |
0 ms |
14232 KB |
Output is correct |
25 |
Correct |
0 ms |
14232 KB |
Output is correct |
26 |
Correct |
0 ms |
14232 KB |
Output is correct |
27 |
Correct |
3 ms |
14232 KB |
Output is correct |
28 |
Correct |
3 ms |
14232 KB |
Output is correct |
29 |
Correct |
3 ms |
14232 KB |
Output is correct |
30 |
Correct |
3 ms |
14232 KB |
Output is correct |
31 |
Correct |
6 ms |
14232 KB |
Output is correct |
32 |
Correct |
0 ms |
14232 KB |
Output is correct |
33 |
Correct |
3 ms |
14232 KB |
Output is correct |
34 |
Correct |
0 ms |
14232 KB |
Output is correct |
35 |
Correct |
0 ms |
14232 KB |
Output is correct |
36 |
Correct |
13 ms |
14584 KB |
Output is correct |
37 |
Correct |
13 ms |
14404 KB |
Output is correct |
38 |
Correct |
9 ms |
14404 KB |
Output is correct |
39 |
Correct |
0 ms |
14584 KB |
Output is correct |
40 |
Correct |
9 ms |
14584 KB |
Output is correct |
41 |
Correct |
9 ms |
14584 KB |
Output is correct |
42 |
Correct |
19 ms |
14584 KB |
Output is correct |
43 |
Correct |
0 ms |
14232 KB |
Output is correct |
44 |
Correct |
16 ms |
14580 KB |
Output is correct |
45 |
Correct |
0 ms |
14584 KB |
Output is correct |
46 |
Correct |
9 ms |
14584 KB |
Output is correct |
47 |
Correct |
9 ms |
14584 KB |
Output is correct |
48 |
Correct |
19 ms |
14584 KB |
Output is correct |
49 |
Correct |
3 ms |
14584 KB |
Output is correct |
50 |
Correct |
3 ms |
14584 KB |
Output is correct |
51 |
Correct |
6 ms |
14584 KB |
Output is correct |
52 |
Correct |
3 ms |
14364 KB |
Output is correct |
53 |
Correct |
9 ms |
14584 KB |
Output is correct |
54 |
Correct |
13 ms |
14380 KB |
Output is correct |
55 |
Correct |
13 ms |
14584 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
14232 KB |
Output is correct |
2 |
Correct |
0 ms |
14232 KB |
Output is correct |
3 |
Correct |
0 ms |
14232 KB |
Output is correct |
4 |
Correct |
0 ms |
14232 KB |
Output is correct |
5 |
Correct |
3 ms |
14232 KB |
Output is correct |
6 |
Correct |
0 ms |
14232 KB |
Output is correct |
7 |
Correct |
0 ms |
14232 KB |
Output is correct |
8 |
Correct |
3 ms |
14232 KB |
Output is correct |
9 |
Correct |
3 ms |
14232 KB |
Output is correct |
10 |
Correct |
0 ms |
14232 KB |
Output is correct |
11 |
Correct |
3 ms |
14232 KB |
Output is correct |
12 |
Correct |
3 ms |
14232 KB |
Output is correct |
13 |
Correct |
6 ms |
14232 KB |
Output is correct |
14 |
Correct |
0 ms |
14232 KB |
Output is correct |
15 |
Correct |
0 ms |
14232 KB |
Output is correct |
16 |
Correct |
3 ms |
14232 KB |
Output is correct |
17 |
Correct |
6 ms |
14232 KB |
Output is correct |
18 |
Correct |
3 ms |
14232 KB |
Output is correct |
19 |
Correct |
0 ms |
14232 KB |
Output is correct |
20 |
Correct |
3 ms |
14232 KB |
Output is correct |
21 |
Correct |
0 ms |
14232 KB |
Output is correct |
22 |
Correct |
0 ms |
14232 KB |
Output is correct |
23 |
Correct |
3 ms |
14232 KB |
Output is correct |
24 |
Correct |
0 ms |
14232 KB |
Output is correct |
25 |
Correct |
0 ms |
14232 KB |
Output is correct |
26 |
Correct |
0 ms |
14232 KB |
Output is correct |
27 |
Correct |
3 ms |
14232 KB |
Output is correct |
28 |
Correct |
3 ms |
14232 KB |
Output is correct |
29 |
Correct |
3 ms |
14232 KB |
Output is correct |
30 |
Correct |
3 ms |
14232 KB |
Output is correct |
31 |
Correct |
6 ms |
14232 KB |
Output is correct |
32 |
Correct |
0 ms |
14232 KB |
Output is correct |
33 |
Correct |
3 ms |
14232 KB |
Output is correct |
34 |
Correct |
0 ms |
14232 KB |
Output is correct |
35 |
Correct |
0 ms |
14232 KB |
Output is correct |
36 |
Correct |
0 ms |
14232 KB |
Output is correct |
37 |
Correct |
3 ms |
14232 KB |
Output is correct |
38 |
Correct |
3 ms |
14232 KB |
Output is correct |
39 |
Correct |
6 ms |
14584 KB |
Output is correct |
40 |
Correct |
329 ms |
25176 KB |
Output is correct |
41 |
Correct |
483 ms |
25176 KB |
Output is correct |
42 |
Correct |
503 ms |
25176 KB |
Output is correct |
43 |
Correct |
3 ms |
14232 KB |
Output is correct |
44 |
Correct |
459 ms |
24352 KB |
Output is correct |
45 |
Correct |
513 ms |
24896 KB |
Output is correct |
46 |
Correct |
269 ms |
21008 KB |
Output is correct |
47 |
Correct |
509 ms |
25176 KB |
Output is correct |
48 |
Correct |
516 ms |
24980 KB |
Output is correct |
49 |
Correct |
99 ms |
25176 KB |
Output is correct |
50 |
Correct |
486 ms |
25176 KB |
Output is correct |
51 |
Correct |
116 ms |
25176 KB |
Output is correct |
52 |
Correct |
519 ms |
25176 KB |
Output is correct |
53 |
Correct |
519 ms |
25176 KB |
Output is correct |
54 |
Correct |
529 ms |
25176 KB |
Output is correct |
55 |
Correct |
13 ms |
14584 KB |
Output is correct |
56 |
Correct |
13 ms |
14404 KB |
Output is correct |
57 |
Correct |
9 ms |
14404 KB |
Output is correct |
58 |
Correct |
0 ms |
14584 KB |
Output is correct |
59 |
Correct |
9 ms |
14584 KB |
Output is correct |
60 |
Correct |
9 ms |
14584 KB |
Output is correct |
61 |
Correct |
19 ms |
14584 KB |
Output is correct |
62 |
Correct |
0 ms |
14232 KB |
Output is correct |
63 |
Correct |
16 ms |
14580 KB |
Output is correct |
64 |
Correct |
0 ms |
14584 KB |
Output is correct |
65 |
Correct |
9 ms |
14584 KB |
Output is correct |
66 |
Correct |
9 ms |
14584 KB |
Output is correct |
67 |
Correct |
19 ms |
14584 KB |
Output is correct |
68 |
Correct |
3 ms |
14584 KB |
Output is correct |
69 |
Correct |
3 ms |
14584 KB |
Output is correct |
70 |
Correct |
6 ms |
14584 KB |
Output is correct |
71 |
Correct |
3 ms |
14364 KB |
Output is correct |
72 |
Correct |
9 ms |
14584 KB |
Output is correct |
73 |
Correct |
13 ms |
14380 KB |
Output is correct |
74 |
Correct |
13 ms |
14584 KB |
Output is correct |
75 |
Correct |
919 ms |
25176 KB |
Output is correct |
76 |
Correct |
556 ms |
21412 KB |
Output is correct |
77 |
Correct |
433 ms |
24676 KB |
Output is correct |
78 |
Correct |
99 ms |
25176 KB |
Output is correct |
79 |
Correct |
589 ms |
25124 KB |
Output is correct |
80 |
Correct |
919 ms |
25176 KB |
Output is correct |
81 |
Correct |
13 ms |
14584 KB |
Output is correct |
82 |
Correct |
843 ms |
24812 KB |
Output is correct |
83 |
Correct |
73 ms |
25176 KB |
Output is correct |
84 |
Correct |
696 ms |
25176 KB |
Output is correct |
85 |
Correct |
743 ms |
25176 KB |
Output is correct |
86 |
Correct |
739 ms |
25176 KB |
Output is correct |
87 |
Correct |
223 ms |
25176 KB |
Output is correct |
88 |
Correct |
199 ms |
25176 KB |
Output is correct |
89 |
Correct |
946 ms |
25176 KB |
Output is correct |
90 |
Correct |
909 ms |
25176 KB |
Output is correct |
91 |
Correct |
909 ms |
25176 KB |
Output is correct |
92 |
Correct |
709 ms |
24972 KB |
Output is correct |
93 |
Correct |
739 ms |
25176 KB |
Output is correct |
94 |
Correct |
903 ms |
25176 KB |
Output is correct |
95 |
Correct |
909 ms |
25176 KB |
Output is correct |