Submission #20543

#TimeUsernameProblemLanguageResultExecution timeMemory
20543CodingAmolang (#35)초음속철도 (OJUZ11_rail)C++11
45 / 100
3000 ms22588 KiB
#include<stdio.h> #include<vector> #include<algorithm>1 using std::vector; const long long MOD = 1000000007; struct indexed_tree { vector<long long> tree; int k = 1; indexed_tree(int n) { while (k <= n)k *= 2; tree.resize(k * 3, 0); } void update(int idx, int a) { tree[k + idx] += a; tree[k + idx] %= MOD; idx = (k + idx) / 2; while (idx) { tree[idx] = (tree[idx * 2] + tree[idx * 2 + 1])%MOD; idx /= 2; } } long long getSum(int l, int r) { l += k; r += k; long long ret = 0; while (l <= r) { if (l % 2 == 1)ret += tree[l]; if (r % 2 == 0)ret += tree[r]; ret %= MOD; l = (l + 1) / 2; r = (r - 1) / 2; } return ret; } }; using std::pair; int main() { int n, m; scanf("%d%d", &n, &m); vector<long long> X = { 1,n }; vector<pair<long long, long long>> seg; for (int i = 0; i < m; i++) { long long s, e; scanf("%lld%lld", &s, &e); seg.push_back({ s,e }); X.push_back(s); X.push_back(e); } std::sort(seg.begin(), seg.end()); std::sort(X.begin(), X.end()); X.erase(std::unique(X.begin(), X.end()), X.end()); indexed_tree tree(X.size()); tree.update(0, 1); for (auto segment : seg) { long long s = std::lower_bound(X.begin(),X.end(),segment.first)-X.begin(); long long e = std::lower_bound(X.begin(),X.end(),segment.second)-X.begin(); tree.update(e, tree.getSum(s, e)); for (int i = e + 1; i < X.size(); i++) { tree.update(i, tree.getSum(i, i)); } } printf("%lld", tree.getSum(X.size() - 1, X.size() - 1)); }

Compilation message (stderr)

rail.cpp:3:20: warning: extra tokens at end of #include directive
 #include<algorithm>1
                    ^
rail.cpp: In function 'int main()':
rail.cpp:60:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = e + 1; i < X.size(); i++) {
                         ^
rail.cpp:41:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
                       ^
rail.cpp:46:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld", &s, &e);
                            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...