1. 程式人生 > >JZOJ 4214. 【NOIP2015模擬9.12】SERN的野望

JZOJ 4214. 【NOIP2015模擬9.12】SERN的野望

平面 des 一行 rip 標記 結束 article sam detail

題目

Description

Error! Human is dead. Mismatch.
SERN妄圖研發出時間機器,然而現在卻只有一堆失敗的實驗品。
然而,SERN妄圖通過這些失敗的試驗品研究出正確的道路,而這首先就需要將這些失敗的實驗品歸類。
每一個實驗品有一個轉移強度D和轉移距離R。由於SERN血腥殘忍、不擇手段,所以所有實驗品的轉移強度均不相同,轉移距離也均不相同。
SERN驚訝的發現,一個時間機器的性能極大地取決於它在高斯平面上的投影。
定義一個時間機器α在高斯平面上的投影λ(α)"傅裏葉包含"【"傅裏葉包含"記作")("】另一個時間機器β在高斯平面上的投影λ(β)【此關系記作"α)(β"】,當且僅當α的轉移強度大於β的轉移強度且α的轉移距離大於β的轉移距離。
定義黎曼-洛倫茲函數ζ(A,S)為真當且僅當在實驗品集合S中的任何實驗品在高斯平面上的投影都不傅裏葉包含實驗品A在高斯平面上的投影,亦即對於任意B∈S,"B)(A"不成立。
而對實驗品的歸類方式可以分為以下幾個步驟:
S1:令i=0
S2:令i=i+1 令S=還沒被分組的實驗品集合
S3:對於每一件S中的武器A,如果黎曼-洛倫茲函數ζ(A,S)為真,則將武器A標記為第i組
【註意S在這個過程中始終保持不變,這稱為分組的牛頓-科特斯一致性】
S4:如果所有實驗品均被分組則結束,否則轉S2

給定N個實驗品的D和R,你的任務是將其分組。

Input

輸入文件的第一行包含一個正整數N,表示實驗品的個數。
接下來N行,每行兩個正整數D,R,描述一個實驗品的D和R.

Output

輸出文件包含N行,每行一個正整數,第i行的數表示第i個實驗品被分在了哪一組。

Sample Input

5
1 4
2 2
3 3
4 1
5 5

Sample Output

2
3
2
2
1

Data Constraint

對於20%的數據,N<=100
對於40%的數據,N<=3000
對於100%的數據,N<=100000,1<=R,D<=10^9

分析

https://blog.csdn.net/weixin_43993341/article/details/88913374

代碼

 1 #include <bits/stdc++.h>
 2  using namespace std;
 3  int f[100001],maxr[100001];
 4  struct A
 5  {
 6      int a,b,c;
 7  }a[100001];
 8  bool cmp (A a,A b)
 9  {
10      return a.a>b.a;
11  }
12  int main()
13  {
14      ios::sync_with_stdio(false);
15      int n;
16      cin>>n;
17      for (int i=1;i<=n;i++)
18      {
19          cin>>a[i].a>>a[i].b;
20         a[i].c=i;
21      }
22      sort (a+1,a+n+1,cmp);
23      maxr[1]=a[1].b;
24      f[a[1].c]=1;
25      for (int i=2;i<=n;i++)
26      {
27          int mid,t=a[i].b,l=1,r=i;
28          while (l<=r)
29          {
30               mid=(l+r)/2;
31              if (maxr[mid]<=t) r=mid-1;
32              if (maxr[mid]>t) l=mid+1;
33          }
34          maxr[l]=max(maxr[l],t);
35          f[a[i].c]=l;
36      }
37      for (int i=1;i<=n;i++)
38        printf("%d\n",f[i]);
39  }

JZOJ 4214. 【NOIP2015模擬9.12】SERN的野望