A-2つのシーケンス2

問題の説明
Snukeには、それぞれ長さがNの2つの数値シーケンス
a

bが
ありますI番目の数であり、I 、及びそのBがあるbは、I













これらのシーケンスを使用して、彼は長さNの新しいシーケンス
cを作成することにしましたそれぞれについてNように1 N N C N N番目の数C 、の最大値であるI BのjのペアのためのI J ように1 I J N 正式には、c n






































最大
1

I

J

nはのb jを




検索
C
1

C
2

...

C
Nを

制約
入力のすべての値は整数です。
1

N

2
×
10
5
1
I bはiは10 9入力入力は、以下の形式で標準入力から与えられます。









N

a
1

a
2


N

b
1

b
2

b
N

印刷N行を
印刷します。nは上から番目の行が含まれている必要があり、C nは






サンプル入力1
コピー
3
3 2 20
1 4 1
サンプル出力1
コピー
3
12
20
我々は持っています:

c
1

max

a
1
b
1

3
;
c
2

max

a
1
b
1

a
1
b
2

a
2
b
2

12
;
c
3

max

a
1
b
1

a
1
b
2

a
1
b
3

a
2
b
2

a
2
b
3

a
3
b
3

20

サンプル入力2
コピー
20
715806713 926832846 890153850 433619693 890169631 501757984 778692206 816865414 50442173 522507343 546693304 851035714 299040991 474850872 133255173 905287070 763360978 327459319 193289538 140803416
974365976 488724815 821047998 371238977 256373343 218153590 546189624 322430037 131351929 768434809 253508808 935670831 251537597 834352123 337485668 272645651 61421502 439773410 621070911 578006919
サンプル出力2
コピー
697457706539596888
697457706539596888
760974252688942308
760974252688942308
760974252688942308
760974252688942308
760974252688942308
760974252688942308
760974252688942308
760974252688942308
760974252688942308
867210459214915026
867210459214915026
867210459214915026
867210459214915026
867210459214915026
867210459214915026
867210459214915026
867210459214915026
867210459214915026

コード

配列の最初のi文字で最大の数字を見つけるたびに、それを見つけてから、最大の数字の後に最大の数字を添えて、最大のbの配列で最大の数字を見つけます。
小さい方の数字を外側に配置して、1次元の
答えに最適化できます。最初のi文字とb [i]の最大値の積

#include<iostream>

using namespace std;
const int N=2e5+10;
typedef long long LL;

LL a[N],b[N];

int main()
{
    
    
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    
    
        LL x;
        scanf("%lld",&x);
        a[i]=max(a[i-1],x);
    }
    for(int i=1;i<=n;i++)  scanf("%lld",&b[i]);
    LL maxv=a[1]*b[1];
    for(int i=1;i<=n;i++)
    {
    
    
        LL c=b[i]*a[i];
        maxv=max(maxv,c);
        printf("%lld\n",maxv);
    }
    return 0;
}

B-メックスボックス
問題の説明
スヌークには
N個の
ボールがあり、それぞれに整数が書かれています。ボールの番号は1 2 ... N










彼はこれらの
N個の
ボールを
K
個のボックスに入れることにしましたすべてのボールはいくつかのボックスに含まれている必要がありますが、ボールが0個または複数あるボックスが存在する場合があります。

彼がボールを箱に入れた後、各箱のふたは整数を示します。ましょ
X
ボックスに表示される整数です。
x
は、ボックスに
xのボールが含まれないような最小の非負の整数
です。たとえば、空のボックスのふたには
0が表示されます
ボール箱の蓋
0

1

3

5が
表示されます
2
ボールと箱の蓋
1

2

3が
表示されます
0を

ふたが示す整数の可能な最大の合計を見つけます。

制約
入力のすべての値は整数です。
1

K

N

3
×
10
5
0
I < Nの入力の入力は、以下の形式で標準入力から与えられます。





N

K

a
1

a
2


N

出力
ふたが示す整数の可能な最大合計を出力します。

サンプル入力1
コピー
4 2
0 1 0 2
サンプル出力1つの
コピー
4
アン最適なソリューションは、ボールのセットを割り当てることで
、{ 0 1 2 } { 0 }ボックスへ。この場合、蓋は表示3を1の合計、それぞれ4 サンプル入力2コピー5 2 0 1 1 2 3サンプル出力2コピー4アン最適なソリューションは、ボールの(マルチ)のセットに割り当てることである{ 0 1































1

2

3
}

{ }ボックスへ。この場合、蓋は示し4 0の合計、それぞれ4 空のボックスがある場合があることに注意してください。サンプル入力3コピー20 4 6 2 6 8 4 5 8 4 1 7 8 0 3 6 1 1 8 0 3サンプル出力3コピー11
















各チームを列挙します。現在のチームの人が使用されている場合、この人の数は1つ減ります。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <set>
#include <string>
#include <queue>
#include <map>
#include <stack>
#include <map>
#include <unordered_map>
#include <vector>
#include <cmath>
 
using namespace std;
 
#define gt(x) x = read()
#define int long long
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
 
const int mod = 20010905;
const int PP = 131;
 
inline int read(int out = 0)
{
    char c;
    while((c=getchar()) < 48 || c > 57);
    while(c >= 48 && c <= 57) out=out*10+c-48,c=getchar();
    return out; 
}
 
const int N = 3e5 + 10;
const int M = 35;
int n, k;
int a[N], cnt[N];
 
signed main(){
	gt(n), gt(k);
	for (int i = 1; i <= n; i ++){
		gt(a[i]);
		cnt[a[i]] ++;
	}  
	
	int ans = 0;
	for (int i = 1; i <= k; i ++){
		for (int j = 0; j <= N; j ++){
			if (!cnt[j]){
				ans += j;
				break;
			}
			else  cnt[j] --;
		}
	}
	
	cout << ans << endl;
	
	return 0;
}```

おすすめ

転載: blog.csdn.net/qq_45772483/article/details/112725936