제출 #134994

#제출 시각아이디문제언어결과실행 시간메모리
134994Lawliet새 집 (APIO18_new_home)C++14
12 / 100
3284 ms43216 KiB
#include <bits/stdc++.h> #define MAXK 410 #define MAX 60010 #define INF 1000000000 #define L first.first #define R first.second #define X second.first #define T second.second using namespace std; typedef pair<int,int> pii; typedef pair<pii,pii> store; struct query { int x, year; int ind; query(int xx, int yy, int ii) { x = xx; year = yy; ind = ii; } bool operator < (const query& a) { if(year != a.year) return year < a.year; return ind < a.ind; } }; int n, q, k; int n1, n2, n3, n4; int ans[MAX]; vector<query> queries; vector<store> s; multiset<int>::iterator it; multiset<int> activedStoresType[MAXK]; multiset<pii> activedStores; int main() { scanf("%d %d %d",&n,&k,&q); for(int g = 1 ; g <= n ; g++) { scanf("%d %d %d %d",&n1,&n2,&n3,&n4); s.push_back({{n3 , n4} , {n1 , n2}}); } sort(s.begin() , s.end()); for(int g = 1 ; g <= q ; g++) { scanf("%d %d",&n1,&n2); query k(n1 , n2 , g); queries.push_back( k ); } sort(queries.begin() , queries.end()); int nextStore = 0; for(int g = 0 ; g < q ; g++) { int x = queries[g].x; int year = queries[g].year; //printf("--------------------------------- %d %d\n",x,year); while(nextStore < n && s[nextStore].L <= year)//ATIVANDO OS CARINHAS { activedStores.insert({s[nextStore].R , nextStore}); //printf("COLOQUEI type = %d %d\n",s[nextStore].T,s[nextStore].X); activedStoresType[ s[nextStore].T ].insert( s[nextStore].X ); nextStore++; } while(!activedStores.empty()) { int cur = activedStores.begin()->second; //printf("oiii %d\n",s[cur].R); //printf("year = %d\n",year); if(year <= s[ cur ].R) break; activedStores.erase( activedStores.begin() ); //printf("TIREI type = %d %d\n",s[cur].T,s[cur].X); it = activedStoresType[ s[cur].T ].lower_bound( s[cur].X ); activedStoresType[ s[cur].T ].erase( it ); } int curAns = -1; bool typeEmpty = false; for(int t = 1 ; t <= k && !typeEmpty ; t++) { if(activedStoresType[t].empty()) { typeEmpty = true; continue; } int cur = INF; it = activedStoresType[ t ].lower_bound( x ); if(it != activedStoresType[ t ].end()) cur = min(cur , abs(*it - x)); if(it != activedStoresType[ t ].begin()) { it--; cur = min(cur , abs(*it - x)); } curAns = max(curAns , cur); } if(typeEmpty) ans[ queries[g].ind ] = -1; else ans[ queries[g].ind ] = curAns; } for(int g = 1 ; g <= q ; g++) printf("%d\n",ans[g]); }

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

new_home.cpp: In function 'int main()':
new_home.cpp:50:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&n,&k,&q);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~
new_home.cpp:54:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d %d",&n1,&n2,&n3,&n4);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:63:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&n1,&n2);
   ~~~~~^~~~~~~~~~~~~~~~~
#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...