結果
| 問題 |
No.2500 Products in a Range
|
| コンテスト | |
| ユーザー |
keisuke6
|
| 提出日時 | 2023-10-13 22:34:05 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,295 bytes |
| コンパイル時間 | 2,172 ms |
| コンパイル使用メモリ | 204,624 KB |
| 最終ジャッジ日時 | 2025-02-17 07:24:32 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 WA * 11 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int long long
int mod = 998244353;
signed main(){
int N,L,R;
cin>>N>>L>>R;
int ans = 0;
vector<int> A = {}, B = {};
int ad = 0;
for(int i=0;i<N;i++){
int a;
cin>>a;
if(a == 0) ad++;
else if(a < 0) A.push_back(-a);
else B.push_back(a);
}
sort(A.rbegin(),A.rend());
sort(B.rbegin(),B.rend());
while(A.size() > 1 && A[A.size()-1]*A[A.size()-2] < L) A.pop_back();
while(B.size() > 1 && B[B.size()-1]*B[B.size()-2] < L) B.pop_back();
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
while(A.size() > 1 && A[A.size()-1]*A[A.size()-2] > R) A.pop_back();
while(B.size() > 1 && B[B.size()-1]*B[B.size()-2] > R) B.pop_back();
int n = A.size(), m = B.size();
vector<int> LL(n,1e18), RR(n,-(1e18));
for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(L <= -A[i]*B[j] && -A[i]*B[j] <= R){
LL[i] = min(LL[i],j);
RR[i] = max(RR[i],j);
}
for(int i=0;i<n;i++)for(int j=i;j<n;j++){
int a = max(LL[i],LL[j]), b = min(RR[i],RR[j]);
if(a > b || LL[i] == 1e18 || LL[j] == 1e18 || RR[i] == -1e18 || RR[j] == -1e18) continue;
ans = max(ans,j-i+1+b-a+1);
}
cout<<max({ans,(int)(A.size()),(int)(B.size())})+(L<=0&&0<=R)*ad<<endl;
}
keisuke6