Submission #34645408


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<(int)n;i++)
int read(){int r;scanf("%d",&r);return r;}

const int N=2e5;
pair<int,int> a[N+10];
vector<int> tr[N+10];
int n;

// [i-(i&(i-1))+1,i] 信息
void add(int x,int y) {
  for(int i=x;i<=N+1;i+=(i&-i)) tr[i].push_back(y);
}

int sum(int x,int l,int r) { // [l,r]
  int res=0;
  for(int i=x;i     ;i-=(i&-i)) res += upper_bound(tr[i].begin(),tr[i].end(),r)   //  (first >  r)
                                      -lower_bound(tr[i].begin(),tr[i].end(),l); // - (first >= l)
  return res;
}

bool check(int x,int y,int k,int d){
  int x0 = max(1  ,x-d);
  int x1 = min(N+1,x+d);
  int y0 = y-d;
  int y1 = y+d;
  // 求 x\in[x0,x1], y\in[y0,y1]
  return (sum(x1,y0,y1)-sum(x0-1,y0,y1)) >= k;
}

int main() {
  int n = read();
  rep(i,0,n){
    int x = read()+1; // 全部x+=1 保证 2e5+1 >= x+y >= 1
    int y = read();
    a[i] = {x+y,x-y};
  }
  sort(a,a+n,[](auto v0,auto v1){return v0.second < v1.second;});// 统一排序,让树状数组内的 值从小到大
  rep(i,0,n) add(a[i].first,a[i].second);
  int q = read();
  while(q--) {
    int x = read()+1; // 全部x+=1
    int y = read();
    int k = read();
    if(check(x+y,x-y,k,0)){
      printf("%d\n",0);
      continue;
    }
    int l=0,r=2e5+10; // 二分范围, l: <k个, r: >= k个
    while(l+1<r) {
      int mid=(l+r)/2;
      (check(x+y,x-y,k,mid)?r:l) = mid;
    }
    printf("%d\n",r);
  }
  return 0;
}

Submission Info

Submission Time
Task Ex - Manhattan Christmas Tree
User cromarmot
Language C++ (GCC 9.2.1)
Score 600
Code Size 1466 Byte
Status AC
Exec Time 2478 ms
Memory 15828 KiB

Compile Error

./Main.cpp: In function ‘int read()’:
./Main.cpp:4:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
    4 | int read(){int r;scanf("%d",&r);return r;}
      |                  ~~~~~^~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 44
Set Name Test Cases
Sample example0.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, example0.txt
Case Name Status Exec Time Memory
000.txt AC 10 ms 8432 KiB
001.txt AC 9 ms 8436 KiB
002.txt AC 10 ms 8244 KiB
003.txt AC 145 ms 8428 KiB
004.txt AC 146 ms 8296 KiB
005.txt AC 170 ms 8400 KiB
006.txt AC 169 ms 8400 KiB
007.txt AC 1166 ms 15656 KiB
008.txt AC 422 ms 15432 KiB
009.txt AC 1607 ms 15780 KiB
010.txt AC 417 ms 15724 KiB
011.txt AC 617 ms 15784 KiB
012.txt AC 463 ms 15704 KiB
013.txt AC 197 ms 8356 KiB
014.txt AC 215 ms 8280 KiB
015.txt AC 198 ms 8248 KiB
016.txt AC 521 ms 8388 KiB
017.txt AC 492 ms 8364 KiB
018.txt AC 564 ms 8412 KiB
019.txt AC 1707 ms 14812 KiB
020.txt AC 1785 ms 15184 KiB
021.txt AC 1764 ms 15260 KiB
022.txt AC 1751 ms 14804 KiB
023.txt AC 1621 ms 14004 KiB
024.txt AC 1737 ms 15136 KiB
025.txt AC 1778 ms 15784 KiB
026.txt AC 1782 ms 15828 KiB
027.txt AC 1791 ms 15556 KiB
028.txt AC 1797 ms 15620 KiB
029.txt AC 1791 ms 15688 KiB
030.txt AC 1807 ms 15784 KiB
031.txt AC 491 ms 15644 KiB
032.txt AC 500 ms 15608 KiB
033.txt AC 2473 ms 15460 KiB
034.txt AC 2478 ms 15792 KiB
035.txt AC 1486 ms 15764 KiB
036.txt AC 1493 ms 15652 KiB
037.txt AC 293 ms 15560 KiB
038.txt AC 301 ms 15448 KiB
039.txt AC 989 ms 12520 KiB
040.txt AC 982 ms 14124 KiB
041.txt AC 423 ms 13380 KiB
042.txt AC 414 ms 11524 KiB
example0.txt AC 8 ms 8352 KiB