QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#135446#6632. Minimize Medianwtn135687WA 61ms7732kbC++141.9kb2023-08-05 15:19:122023-08-05 15:19:14

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-08-05 15:19:14]
  • 评测
  • 测评结果:WA
  • 用时:61ms
  • 内存:7732kb
  • [2023-08-05 15:19:12]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll

const int N = 1e6+10,mo = 1e9+7;
template<class T>
struct BIT {
	T c[N];
	int size;
	void resize(int s) { 
        size = s;
        for(int i=0;i<=s;i++)c[i]=2e9;
    }
	T query(int x) { // 1 ... x
		assert(x <= size);//检测错误输入
		T s = 2e9;
		for (; x; x -= x & (-x)) {
			s =min(s,c[x]);
		}
		return s;
	}
	void modify(int x, T s) { // a[x] += s
		assert(x != 0);
		for (; x <= size; x += x & (-x)) {
			c[x] =min(c[x], s);
		}
	}
};
int a[N],dp[N];
BIT <int>tree;
void fuck(int n){
    tree.resize(n);
    for(int i=n-1;i>=1;i--)dp[i]=min(dp[i+1],dp[i]);
    for(int i=1;i<=n;i++){
        tree.modify(n-i+1,dp[i]);
    }
    for(int i=1;i<=n;i++){
        dp[i]=min(dp[i],tree.query(n-i+1));
        for(int j=2;j<=n;j++){
            if(i*j>n)break;;
            dp[i*j]=min(dp[i*j],dp[i]+dp[j]);
            tree.modify(n-i*j+1,dp[i*j]);
        }
    }
    // cerr<<"dp:";for(int i=1;i<=n;i++)cerr<<dp[i]<<" \n"[i==n];
}
int n,m,k;
bool check(int mid){
    ll sum=0;
    for(int i=1;i<=n/2+1;i++){
        if(a[i]>mid){
            int kk=a[i]/(mid+1)+1;
            if(kk>m)return 0;
            sum+=dp[kk];
        }
    }
    // cerr<<"sum="<<sum<<" k="<<k<<"\n";
    return sum<=k;
}
inline void solve(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=m;i++)cin>>dp[i];
    dp[m+1]=1e18;
    dp[m+2]=1e18;
    m+=2;
    fuck(m);
    a[n+1]=2e9;
    sort(a+1,a+1+n);
    int r=a[n/2+2];
    int l=0;
    while(l<r){
        int mid=l+r>>1;
        bool res=check(mid);
        // cerr<<"res="<<res<<"\n";
        if(res)r=mid;
        else l=mid+1;
    }
    cout<<l<<"\n";
}



signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int WTN666=1;cin>>WTN666;
    while(WTN666--){
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 7732kb

input:

3
3 5 0
2 5 2
3 2 4 6 13
3 5 3
2 5 3
3 2 4 6 13
3 5 6
2 5 2
3 2 4 6 13

output:

2
2
1

result:

ok 3 number(s): "2 2 1"

Test #2:

score: -100
Wrong Answer
time: 61ms
memory: 7688kb

input:

100000
5 10 5
3 7 1 10 10
11 6 11 6 1 8 9 1 3 1
5 6 51
2 2 2 5 1
42 61 26 59 100 54
5 10 76
7 5 8 4 7
97 4 44 83 61 45 24 88 44 44
5 8 90
1 1 5 1 3
35 15 53 97 71 83 26 7
5 3 52
1 1 3 1 1
22 6 93
5 6 28
6 6 1 3 1
9 31 2 19 10 27
5 8 31
3 6 2 1 2
32 29 13 7 57 34 9 5
5 6 75
3 3 4 5 4
40 56 38 60 17 3...

output:

0
2
0
0
0
0
0
0
3
4
0
0
0
0
1
1
0
0
0
0
1
1
0
2
2
0
0
0
0
0
2
0
0
0
2
2
0
1
0
0
0
0
1
0
2
4
1
1
0
0
2
0
0
7
0
1
0
0
0
1
1
0
1
0
1
0
0
2
1
0
6
3
0
0
1
0
2
0
0
3
0
1
0
1
0
2
0
0
0
0
1
2
1
4
0
0
0
0
0
0
1
2
2
1
2
2
0
1
1
0
0
0
0
0
1
2
1
4
1
0
4
1
2
1
0
0
0
0
1
2
1
0
0
2
3
1
0
1
1
1
0
1
5
0
1
2
0
2
0
0
...

result:

wrong answer 2790th numbers differ - expected: '0', found: '1'