답안 #120159

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
120159 2019-06-23T15:34:00 Z KLPP Two Antennas (JOI19_antennas) C++14
24 / 100
3000 ms 33688 KB
#include<bits/stdc++.h>

using namespace std;
typedef long long int lld;
typedef pair<lld,lld> pii;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)
int n;
lld h[1000000];
lld a[1000000];
lld b[1000000];

lld Max(lld a, lld b){
  if(a==-1)return b;
  if(b==-1)return a;
  return max(a,b);
}
lld Min(lld a, lld b){
  if(a==-1)return b;
  if(b==-1)return a;
  return min(a,b);
}
class ST{
  lld tree1[1000000];
  lld tree2[1000000];
public:
  void build(int a, int b, int node){
    tree1[node]=-1;
    tree2[node]=-1;
    if(a==b)return;
    int mid=(a+b)/2;
    build(a,mid,2*node);
    build(mid+1,b,2*node+1);
  }
  void update(int a, int b, int node, int pos, lld val){
    if(pos<a || b<pos)return;
    if(a==b){
      tree1[node]=val;
      tree2[node]=val;
      return;
    }
    int mid=(a+b)/2;
    update(a,mid,2*node,pos,val);
    update(mid+1,b,2*node+1,pos,val);
    tree1[node]=Max(tree1[2*node],tree1[2*node+1]);
    tree2[node]=Min(tree2[2*node],tree2[2*node+1]);
  }
  lld QMax(int a, int b, int node, int x, int y){
    if(b<x || y<a)return -1;
    if(x<=a && b<=y)return tree1[node];
    int mid=(a+b)/2;
    return Max(QMax(a,mid,2*node,x,y),QMax(mid+1,b,2*node+1,x,y));
  }
  lld QMin(int a, int b, int node, int x, int y){
    if(b<x || y<a)return -1;
    if(x<=a && b<=y)return tree2[node];
    int mid=(a+b)/2;
    return Min(QMin(a,mid,2*node,x,y),QMin(mid+1,b,2*node+1,x,y));
  }
};
int main(){
  scanf("%d",&n);
  rep(i,0,n){
    scanf("%lld %lld %lld",&h[i],&a[i],&b[i]);
  }
  ST *S=new ST();
  int q;
  scanf("%d",&q);
  while(q--){
    int l,r;
    scanf("%d %d",&l,&r);
    S->build(1,n,1);
    vector<pii> v;
    rep(i,l,r+1){
      v.push_back(pii(i+a[i-1],i));
      v.push_back(pii(i+b[i-1]+1,-i));
    }
    sort(v.begin(),v.end());
    int ptr=0;
    lld ans=-1;
    rep(i,l,r+1){
      while(ptr<v.size() && v[ptr].first<=i){
	if(v[ptr].second>0){
	  S->update(1,n,1,v[ptr].second,h[v[ptr].second-1]);
	}else{
	  S->update(1,n,1,-v[ptr].second,-1);
	}
	ptr++;
      }
      lld m,M;
      
      
      m=S->QMin(1,n,1,i-b[i-1],i-a[i-1]);
      M=S->QMax(1,n,1,i-b[i-1],i-a[i-1]);
      //cout<<m<<" "<<M<<endl;
      if(m!=-1)ans=max(ans,h[i-1]-m);
      if(M!=-1)ans=max(ans,M-h[i-1]);
    }
    printf("%lld\n",ans);
  }
  return 0;
}

Compilation message

antennas.cpp: In function 'int main()':
antennas.cpp:82:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       while(ptr<v.size() && v[ptr].first<=i){
             ~~~^~~~~~~~~
antennas.cpp:62:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&n);
   ~~~~~^~~~~~~~~
antennas.cpp:64:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld %lld %lld",&h[i],&a[i],&b[i]);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
antennas.cpp:68:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&q);
   ~~~~~^~~~~~~~~
antennas.cpp:71:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d",&l,&r);
     ~~~~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 16000 KB Output is correct
2 Correct 20 ms 16000 KB Output is correct
3 Correct 19 ms 16000 KB Output is correct
4 Correct 21 ms 16000 KB Output is correct
5 Correct 15 ms 16000 KB Output is correct
6 Correct 18 ms 16128 KB Output is correct
7 Correct 20 ms 16000 KB Output is correct
8 Correct 22 ms 16128 KB Output is correct
9 Correct 16 ms 16000 KB Output is correct
10 Correct 20 ms 16000 KB Output is correct
11 Correct 15 ms 16000 KB Output is correct
12 Correct 23 ms 16128 KB Output is correct
13 Correct 16 ms 15992 KB Output is correct
14 Correct 18 ms 16000 KB Output is correct
15 Correct 16 ms 16000 KB Output is correct
16 Correct 18 ms 16000 KB Output is correct
17 Correct 19 ms 16000 KB Output is correct
18 Correct 19 ms 16000 KB Output is correct
19 Correct 14 ms 16000 KB Output is correct
20 Correct 17 ms 16000 KB Output is correct
21 Correct 17 ms 16120 KB Output is correct
22 Correct 18 ms 16000 KB Output is correct
23 Correct 17 ms 16128 KB Output is correct
24 Correct 39 ms 16120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 16000 KB Output is correct
2 Correct 20 ms 16000 KB Output is correct
3 Correct 19 ms 16000 KB Output is correct
4 Correct 21 ms 16000 KB Output is correct
5 Correct 15 ms 16000 KB Output is correct
6 Correct 18 ms 16128 KB Output is correct
7 Correct 20 ms 16000 KB Output is correct
8 Correct 22 ms 16128 KB Output is correct
9 Correct 16 ms 16000 KB Output is correct
10 Correct 20 ms 16000 KB Output is correct
11 Correct 15 ms 16000 KB Output is correct
12 Correct 23 ms 16128 KB Output is correct
13 Correct 16 ms 15992 KB Output is correct
14 Correct 18 ms 16000 KB Output is correct
15 Correct 16 ms 16000 KB Output is correct
16 Correct 18 ms 16000 KB Output is correct
17 Correct 19 ms 16000 KB Output is correct
18 Correct 19 ms 16000 KB Output is correct
19 Correct 14 ms 16000 KB Output is correct
20 Correct 17 ms 16000 KB Output is correct
21 Correct 17 ms 16120 KB Output is correct
22 Correct 18 ms 16000 KB Output is correct
23 Correct 17 ms 16128 KB Output is correct
24 Correct 39 ms 16120 KB Output is correct
25 Execution timed out 3021 ms 16444 KB Time limit exceeded
26 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 320 ms 28644 KB Output is correct
2 Correct 345 ms 33688 KB Output is correct
3 Correct 239 ms 30824 KB Output is correct
4 Correct 334 ms 33636 KB Output is correct
5 Correct 151 ms 24424 KB Output is correct
6 Correct 332 ms 33636 KB Output is correct
7 Correct 286 ms 32356 KB Output is correct
8 Correct 324 ms 33636 KB Output is correct
9 Correct 54 ms 18544 KB Output is correct
10 Correct 334 ms 33640 KB Output is correct
11 Correct 199 ms 25960 KB Output is correct
12 Correct 328 ms 33636 KB Output is correct
13 Correct 181 ms 33524 KB Output is correct
14 Correct 177 ms 33540 KB Output is correct
15 Correct 172 ms 33480 KB Output is correct
16 Correct 164 ms 33544 KB Output is correct
17 Correct 188 ms 33488 KB Output is correct
18 Correct 172 ms 33508 KB Output is correct
19 Correct 177 ms 33508 KB Output is correct
20 Correct 176 ms 33636 KB Output is correct
21 Correct 172 ms 33508 KB Output is correct
22 Correct 177 ms 33508 KB Output is correct
23 Correct 179 ms 33508 KB Output is correct
24 Correct 165 ms 33508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 16000 KB Output is correct
2 Correct 20 ms 16000 KB Output is correct
3 Correct 19 ms 16000 KB Output is correct
4 Correct 21 ms 16000 KB Output is correct
5 Correct 15 ms 16000 KB Output is correct
6 Correct 18 ms 16128 KB Output is correct
7 Correct 20 ms 16000 KB Output is correct
8 Correct 22 ms 16128 KB Output is correct
9 Correct 16 ms 16000 KB Output is correct
10 Correct 20 ms 16000 KB Output is correct
11 Correct 15 ms 16000 KB Output is correct
12 Correct 23 ms 16128 KB Output is correct
13 Correct 16 ms 15992 KB Output is correct
14 Correct 18 ms 16000 KB Output is correct
15 Correct 16 ms 16000 KB Output is correct
16 Correct 18 ms 16000 KB Output is correct
17 Correct 19 ms 16000 KB Output is correct
18 Correct 19 ms 16000 KB Output is correct
19 Correct 14 ms 16000 KB Output is correct
20 Correct 17 ms 16000 KB Output is correct
21 Correct 17 ms 16120 KB Output is correct
22 Correct 18 ms 16000 KB Output is correct
23 Correct 17 ms 16128 KB Output is correct
24 Correct 39 ms 16120 KB Output is correct
25 Execution timed out 3021 ms 16444 KB Time limit exceeded
26 Halted 0 ms 0 KB -