#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const ll MAX=400005;
const ll INFLL=0x3f3f3f3f3f3f3f;
struct vill{
ll x,y,idx;
};
vill v[MAX];
struct edge{
ll x,y,d;
bool operator<(const edge &a)const{
return d<a.d;
}
};
struct area{ll x1,y1,x2,y2;};
area h[MAX];
vector<ll> ixcp,iycp,ex[2*MAX],ey[2*MAX],val,val2;
vector<edge> mst;
vector<pll> conn[MAX];
multiset<ll> pos;
ll chk[MAX],n,m,c,par[MAX],cum;
ll x_getidx(ll x){return lower_bound(ixcp.begin(),ixcp.end(),x)-ixcp.begin();}
ll y_getidx(ll y){return lower_bound(iycp.begin(),iycp.end(),y)-iycp.begin();}
ll fnd(ll x){
if(par[x]!=x) return par[x]=fnd(par[x]);
return x;
}
void uni(ll x,ll y){
x=fnd(x), y=fnd(y);
par[x]=y;
}
bool cmpx(vill a,vill b){
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
bool cmpy(vill a,vill b){
if(a.y!=b.y) return a.y<b.y;
return a.x<b.x;
}
ll exist(ll x,ll y){
set<ll>::iterator it=pos.lower_bound(x);
if(it==pos.end()) return false;
if(*it<=y) return true;
return false;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&c);
for(ll i=0;i<n;i++){scanf("%lld%lld",&v[i].x,&v[i].y),v[i].idx=i;}
for(ll i=0;i<m;i++){scanf("%lld%lld%lld%lld",&h[i].x1,&h[i].y1,&h[i].x2,&h[i].y2),h[i].x2++,h[i].y2++;}
for(ll i=0;i<m;i++) {
ixcp.push_back(h[i].x1); ixcp.push_back(h[i].x2);
iycp.push_back(h[i].y1), iycp.push_back(h[i].y2);
}
sort(ixcp.begin(),ixcp.end());
sort(iycp.begin(),iycp.end());
ixcp.erase(unique(ixcp.begin(),ixcp.end()),ixcp.end());
iycp.erase(unique(iycp.begin(),iycp.end()),iycp.end());
for(ll i=0;i<m;i++){
ex[x_getidx(h[i].x1)].push_back(i), ey[y_getidx(h[i].y1)].push_back(i);
ex[x_getidx(h[i].x2)].push_back(i), ey[y_getidx(h[i].y2)].push_back(i);
}
pos.clear();
sort(v,v+n,cmpx);
for(ll i=1,pt=0;i<n;i++){
if(v[i-1].x==v[i].x){
for(;ixcp[pt]<=v[i].x&&pt<ixcp.size();pt++){
for(ll j=0;j<ex[pt].size();j++) {
if(chk[ex[pt][j]]) pos.erase(h[ex[pt][j]].y1),pos.erase(h[ex[pt][j]].y2-1);
else pos.insert(h[ex[pt][j]].y1),pos.insert(h[ex[pt][j]].y2-1);
chk[ex[pt][j]]^=1;
}
}
if(!exist(v[i-1].y,v[i].y)){
ll dist=v[i].y-v[i-1].y;
conn[v[i].idx].push_back(make_pair(v[i-1].idx,dist));
conn[v[i-1].idx].push_back(make_pair(v[i].idx,dist));
}
}
}
pos.clear();
for(ll i=0;i<m;i++) chk[i]=0;
sort(v,v+n,cmpy);
for(ll i=1,pt=0;i<n;i++){
if(v[i-1].y==v[i].y){
for(;iycp[pt]<=v[i].y&&pt<iycp.size();pt++){
for(ll j=0;j<ey[pt].size();j++) {
if(chk[ey[pt][j]]) pos.erase(h[ey[pt][j]].x1),pos.erase(h[ey[pt][j]].x2-1);
else pos.insert(h[ey[pt][j]].x1),pos.insert(h[ey[pt][j]].x2-1);
chk[ey[pt][j]]^=1;
}
}
if(!exist(v[i-1].x,v[i].x)){
ll dist=v[i].x-v[i-1].x;
conn[v[i].idx].push_back(make_pair(v[i-1].idx,dist));
conn[v[i-1].idx].push_back(make_pair(v[i].idx,dist));
}
}
}
for(ll i=0;i<n;i++){
for(ll j=0;j<conn[i].size();j++) {
if(i<conn[i][j].x) mst.push_back({i,conn[i][j].x,conn[i][j].y});
}
}
for(ll i=0;i<n;i++) par[i]=i;
sort(mst.begin(),mst.end());
val.push_back(0),val2.push_back(0);
for(ll i=0;i<mst.size();i++){
if(fnd(mst[i].x)!=fnd(mst[i].y)) cum+=mst[i].d, val.push_back(cum), val2.push_back(mst[i].d), uni(mst[i].x,mst[i].y);
}
vector<ll>::iterator it;
for(ll i=0;i<c;i++){
ll t1,t2;
scanf("%lld%lld",&t1,&t2);
if(n>=t2+val.size()){
printf("-1\n");
}
else{
it=lower_bound(val2.begin(),val2.end(),t1);
ll idx=max((ll)(it-val2.begin()-1),n-t2);
printf("%lld\n",val[idx]+t1*(n-idx));
}
}
}
Compilation message
construction.cpp: In function 'int main()':
construction.cpp:71:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(;ixcp[pt]<=v[i].x&&pt<ixcp.size();pt++){
~~^~~~~~~~~~~~
construction.cpp:72:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ll j=0;j<ex[pt].size();j++) {
~^~~~~~~~~~~~~~
construction.cpp:90:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(;iycp[pt]<=v[i].y&&pt<iycp.size();pt++){
~~^~~~~~~~~~~~
construction.cpp:91:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ll j=0;j<ey[pt].size();j++) {
~^~~~~~~~~~~~~~
construction.cpp:105:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ll j=0;j<conn[i].size();j++) {
~^~~~~~~~~~~~~~~
construction.cpp:113:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ll i=0;i<mst.size();i++){
~^~~~~~~~~~~
construction.cpp:121:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(n>=t2+val.size()){
~^~~~~~~~~~~~~~~
construction.cpp:52:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld%lld%lld",&n,&m,&c);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
construction.cpp:53:58: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
for(ll i=0;i<n;i++){scanf("%lld%lld",&v[i].x,&v[i].y),v[i].idx=i;}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
construction.cpp:54:96: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
for(ll i=0;i<m;i++){scanf("%lld%lld%lld%lld",&h[i].x1,&h[i].y1,&h[i].x2,&h[i].y2),h[i].x2++,h[i].y2++;}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
construction.cpp:120:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld%lld",&t1,&t2);
~~~~~^~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
71 ms |
48632 KB |
Output is correct |
2 |
Correct |
279 ms |
64232 KB |
Output is correct |
3 |
Correct |
276 ms |
64276 KB |
Output is correct |
4 |
Correct |
424 ms |
84644 KB |
Output is correct |
5 |
Correct |
366 ms |
84644 KB |
Output is correct |
6 |
Correct |
301 ms |
84644 KB |
Output is correct |
7 |
Correct |
292 ms |
85328 KB |
Output is correct |
8 |
Correct |
287 ms |
85328 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1581 ms |
94800 KB |
Output is correct |
2 |
Correct |
1563 ms |
94800 KB |
Output is correct |
3 |
Correct |
1594 ms |
94800 KB |
Output is correct |
4 |
Correct |
1744 ms |
94800 KB |
Output is correct |
5 |
Incorrect |
903 ms |
94800 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
612 ms |
94800 KB |
Output is correct |
2 |
Correct |
606 ms |
94800 KB |
Output is correct |
3 |
Correct |
546 ms |
94800 KB |
Output is correct |
4 |
Correct |
629 ms |
94800 KB |
Output is correct |
5 |
Correct |
453 ms |
94800 KB |
Output is correct |
6 |
Correct |
690 ms |
94800 KB |
Output is correct |
7 |
Correct |
674 ms |
94800 KB |
Output is correct |
8 |
Correct |
614 ms |
94800 KB |
Output is correct |
9 |
Correct |
568 ms |
94800 KB |
Output is correct |
10 |
Correct |
631 ms |
94800 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1912 ms |
102252 KB |
Output is correct |
2 |
Correct |
1033 ms |
102252 KB |
Output is correct |
3 |
Correct |
1865 ms |
102252 KB |
Output is correct |
4 |
Correct |
459 ms |
102252 KB |
Output is correct |
5 |
Correct |
1934 ms |
102252 KB |
Output is correct |
6 |
Correct |
452 ms |
102252 KB |
Output is correct |
7 |
Correct |
1676 ms |
102252 KB |
Output is correct |
8 |
Correct |
1876 ms |
102252 KB |
Output is correct |
9 |
Correct |
927 ms |
113776 KB |
Output is correct |
10 |
Correct |
1149 ms |
116904 KB |
Output is correct |
11 |
Correct |
681 ms |
116904 KB |
Output is correct |