Pagini recente » Cod sursa (job #3164136) | Cod sursa (job #1239411) | Cod sursa (job #3222661) | Cod sursa (job #2919911) | Cod sursa (job #3232756)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ft first
#define sd second
using i64 = int64_t;
const i64 INF = 3 * 1e9;
i64 ugh[1000000];
class segtree {
private:
vector<i64> data;
i64 len;
i64 realLen(i64 n) {
i64 res = 1;
while (res <= n) {
res *= 2;
}
return res * 2;
}
public:
segtree(i64 L) {
len = realLen(L);
data.assign(len + 1, 0);
}
void update(i64 idx, i64 val) {
idx += len / 2;
data[idx] += val;
idx /= 2;
while (idx > 0) {
data[idx] = data[idx * 2] + data[idx * 2 + 1];
idx /= 2;
}
}
i64 query(i64 l, i64 r) {
l += len / 2;
r += len / 2;
i64 res = 0;
while (l <= r) {
if (l % 2 == 1) {
res += data[l];
l++;
}
if (r % 2 == 0) {
res += data[r];
r--;
}
r /= 2;
l /= 2;
}
return res;
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// #ifdef LOCAL
ifstream cin{"stergeri.in"};
ofstream cout{"stergeri.out"};
// #endif
i64 n, mm, k;
cin >> n >> mm >> k;
set<i64> cc;
vector<pair<i64, i64>> v(mm);
for (i64 i = 0; i < mm; i++) {
cin >> v[i].ft >> v[i].sd;
cc.insert(v[i].ft);
cc.insert(v[i].sd);
}
map<i64, i64> m;
i64 crt = 1;
for (auto& e : cc) {
m[e] = crt;
ugh[crt] = e;
crt++;
}
segtree s(crt + 2);
for (i64 i = 0; i < mm; i++) {
i64 v1 = s.query(1, m[v[i].ft]) + v[i].ft;
i64 v2 = s.query(1, m[v[i].sd]) + v[i].sd;
s.update(m[v[i].ft], v2 - v1 + 1);
}
i64 idx = 0;
for (auto& e : cc) {
if (e > k) {
break;
}
idx = e;
}
cout << s.query(0, m[idx]) + k;
return 0;
}