1 #pragma warning(disable:4996) 2 3 #include<iostream> 4 #include<string> 5 #include<queue> 6 #include<stack> 7 #include<vector> 8 #include<map> 9 #include<cstdio> 10 #include<cstdlib> 11 #include<algorithm> 12 #include<set> 13 #include<list> 14 #include<iomanip> 15 #include<cstring> 16 #include<cmath> 17 #include<limits> 18 using namespace std; 19 20 #define au auto 21 #define debug(i) cout<<"<debug> "<<i<<" <\debug>"<<endl 22 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++) 23 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--) 24 #define LLL __int128 25 #define Re register 26 #define il inline 27 #define mem(a,b) memset(a,(b),sizeof(a)) 28 #define Design ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) 29 typedef pair<int, int> intpair; 30 typedef pair<long long int, long long int> llpair; 31 typedef long long int LL; 32 const int INF = 0x3f3f3f3f; 33 const long long int INFLL = 0x3f3f3f3f3f3f3f3f; 34 35 const int maxn = 200010; 36 int sol[maxn]; 37 int m, n, k, t; 38 39 struct trap 40 { 41 int l, r; 42 int d; 43 trap() :l(0), r(0), d(0) {} 44 trap(int a, int b, int c) :l(a), r(b), d(c) {} 45 bool operator <(trap s)const 46 { 47 return d < s.d; 48 } 49 }tr[maxn]; 50 51 bool cmp(trap a, trap b) 52 { 53 if (a.l == b.l) return a.r < b.r; 54 return a.l < b.l; 55 } 56 57 bool check(int x) 58 { 59 //debug("x: " << x << " sol[x]: " << sol[x]); 60 if (tr[k].d <= sol[x]) return true; 61 int low = 1; 62 int high = k; 63 while (low < high) 64 { 65 int mid = (low + high) >> 1; 66 if (tr[mid].d <= sol[x]) low = mid + 1; 67 else high = mid; 68 } 69 //debug("low: " << low); 70 vector<trap>temp; 71 mfor(i, low, k) temp.push_back(tr[i]); 72 sort(temp.begin(), temp.end(), cmp); 73 vector<intpair>res; 74 int l, r; 75 l = temp[0].l; 76 r = temp[0].r; 77 mfor(i, 1, temp.size() - 1) 78 { 79 if (temp[i].l <= r) 80 { 81 r = max(r, temp[i].r); 82 } 83 else 84 { 85 res.push_back(intpair(l, r)); 86 l = temp[i].l; 87 r = temp[i].r; 88 } 89 } 90 res.push_back(intpair(l, r)); 91 int sum = 0; 92 for (auto it : res) 93 { 94 sum += it.second - it.first + 1; 95 } 96 //debug("sum: " << sum); 97 return (sum << 1) + n < t; 98 } 99 100 int main() 101 { 102 Design; 103 cin >> m >> n >> k >> t; 104 mfor(i, 1, m) cin >> sol[i]; 105 sort(sol + 1, sol + 1 + m); 106 mfor(i, 1, k) cin >> tr[i].l >> tr[i].r >> tr[i].d; 107 sort(tr + 1, tr + 1 + k); 108 int l = 1; 109 int r = m; 110 while (l < r) 111 { 112 int mid = (l + r) >> 1; 113 if (!check(mid)) l = mid + 1; 114 else r = mid; 115 } 116 if (check(l)) cout << m - l + 1; 117 else cout << m - l; 118 }
【codeforces 19/11/27 div2】D. A Game with Traps
猜你喜欢
转载自www.cnblogs.com/thjkhdf12/p/11959485.html
今日推荐
周排行