제출 #499919

#제출 시각아이디문제언어결과실행 시간메모리
499919gozonitePairs (IOI07_pairs)C++14
60 / 100
88 ms5080 KiB
#include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm> #include <climits> #include <cstdlib> #include <cstdio> #include <set> #include <unordered_set> #include <map> #include <unordered_map> #include <bitset> #include <deque> #include <queue> #include <tuple> #include <cmath> #include <cctype> #include <stack> #include <cassert> using namespace std; using ll = long long; struct vert { int x, y, t; }; bool cmp(const vert& a, const vert& b) { if (a.x != b.x) return a.x < b.x; return a.t < b.t; } int B, N, D, M; int inp[3][100001]; vert verts[200001]; int bit1[150002]={}; void addv(int k, int v) { for(; k <= 150000; k += k&-k) bit1[k] += v; } int sumr(int k) { int s = 0; for (; k >= 1; k -= k&-k) s += bit1[k]; return s; } int main() { cin >> B >> N >> D >> M; if (B==1) { for (int i = 1; i <= N; i++) cin >> inp[0][i]; sort(inp[0]+1, inp[0]+1+N); int idx = 1; ll cnt = 0; for (int i = 1; i <= N; i++) { while (idx < N && inp[0][i]+D >= inp[0][idx+1]) idx++; cnt += (idx-i); } cout << cnt << endl; } else if (B==2) { for (int i = 1; i <= N; i++) cin >> inp[0][i] >> inp[1][i]; for (int i = 1; i <= N; i++) { verts[2*i-1] = {inp[0][i]-inp[1][i], inp[0][i]+inp[1][i], 0}; verts[2*i] = {inp[0][i]-inp[1][i]+D, inp[0][i]+inp[1][i], 1}; } sort(verts+1, verts+1+2*N, cmp); ll ans = 0; for (int i = 1; i <= 2*N; i++) { int y = verts[i].y; if (verts[i].t == 0) { int fy = max(2, y-D), sy = min(2*M, y+D); ans += sumr(sy)-sumr(fy-1); addv(y, 1); } else { addv(y, -1); } } cout << ans << endl; } else if (B==3) { for (int i = 1; i <= N; i++) cin >> inp[0][i] >> inp[1][i] >> inp[2][i]; } return 0; }
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...