제출 #1288550

#제출 시각아이디문제언어결과실행 시간메모리
1288550huudaiExamination (JOI19_examination)C++20
100 / 100
252 ms11472 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define pii pair<int, int> #define pll pair<ll,ll> #define mp make_pair #define pb push_back #define BIT(x,i) (((x)>>(i))&1) #define MASK(i) (1LL<<(i)) template<typename T1, typename T2> bool minimize(T1 &a, T2 b) {if(a>b) a=b; else return 0; return 1;} template<typename T1, typename T2> bool maximize(T1 &a, T2 b) {if(a<b) a=b; else return 0; return 1;} #define file "task" const int maxn = 2e5 + 5; const int MOD = 1e9 + 7; const int oo = 1e9; const ll OO = 1e18; int n, q; pii a[maxn]; int ans[maxn]; vector<int> comnum; struct fenwick{ int fw[maxn]; fenwick(){ memset(fw, 0, sizeof(fw)); } void update(int id, int w){ for(;id <= n + q; id += id & -id) fw[id] += w; } int get(int id){ int ret = 0; for(;id > 0; id -= id & -id) ret += fw[id]; return ret; } } fw; struct item{ int x, y, z, id; item(){} item(int x, int y, int z, int id) : x(x), y(y), z(z), id(id){} }; vector<item> query; bool cmp(item a, item b){ if(a.z == b.z) return a.id < b.id; return a.z > b.z; } void input(){ cin >> n >> q; for(int i = 1; i <= n; i++){ cin >> a[i].fi >> a[i].se; } } void merge(int l, int m, int r){ vector<item> p1, p2; for(int i = l; i <= m; i++){ if(query[i].id == 0) p1.pb(item(query[i].x, query[i].y, query[i].x, 0)); } for(int i = m + 1; i <= r; i++){ if(query[i].id) p2.pb(item(query[i].x, query[i].y, query[i].x, query[i].id)); } sort(p1.begin(), p1.end(), cmp); sort(p2.begin(), p2.end(), cmp); int i = 0; for(auto [x, y, z, id] : p2){ while(i < p1.size() && p1[i].x >= x){ fw.update(p1[i].y, 1); i++; } ans[id] += fw.get(n + q) - fw.get(y - 1); } for(int j = i - 1; j >= 0; j--) fw.update(p1[j].y, - 1); } void dnc(int l, int r){ if(l == r) return; int m = (l + r) >> 1; dnc(l, m); dnc(m + 1, r); merge(l, m, r); } void proc(){ for(int i = 1; i <= n; i++){ comnum.pb(a[i].se); query.pb(item(a[i].fi, a[i].se, a[i].fi + a[i].se, 0)); } for(int i = 1; i <= q; i++){ int x, y, z; cin >> x >> y >> z; comnum.pb(y); query.pb(item(x, y, z, i)); } sort(comnum.begin(), comnum.end()); comnum.erase(unique(comnum.begin(), comnum.end()), comnum.end()); for(auto &[x, y, z, id] : query) y = lower_bound(comnum.begin(), comnum.end(), y) - comnum.begin() + 1; sort(query.begin(), query.end(), cmp); dnc(0, n + q - 1); for(int i = 1; i <= q; i++){ cout << ans[i] << '\n'; } } signed main(){ cin.tie(nullptr)->sync_with_stdio(0); cout.tie(nullptr); if(fopen(file".inp", "r")){ freopen(file".inp", "r", stdin); freopen(file".out", "w", stdout); } input(); proc(); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

examination.cpp: In function 'int main()':
examination.cpp:133:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  133 |         freopen(file".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
examination.cpp:134:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  134 |         freopen(file".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...