A問題
言われたとおりに実装しましょう。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
signed main(){
int a, b, c;
cin >> a >> b >> c;
if(c >= a && c <= b){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
}
B問題
それぞれの数字の出現回数を記録しておけばよいです。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
signed main(){
int n, m;
cin >> n >> m;
vector<int> ans(n + 1, 0);
//出現回数を数える配列を用意
for(int i = 0; i < m; i++){
int a, b;
cin >> a >> b;
ans[a]++;
ans[b]++;
//出現回数をカウント
}
//結果を出力
for(int i = 1; i <= n; i++){
cout << ans[i] << endl;
}
}
C問題
制約を確認すると、愚直に整数を挿入していては、TLEになってしまいます。
なので、なんという整数がいくつあるかということを記録しておきます。
そして、記録した配列をソートします。
そうすると、ある整数n以下の整数がいくつあるかというのを高速に求めることができます。
$K$以上か$K$以下の境目がこの問題の答えになります。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
signed main(){
long long n, k;
cin >> n >> k;
vector<pair<long long, long long> > vec(n);
for(int i = 0; i < n; i++){
cin >> vec[i].first >> vec[i].second;
//記録しておく
}
sort(vec.begin(), vec.end());
//ソートする
long long a = 0; //ある整数以下の整数の数を記録する変数
for(int i = 0; i < n; i++){
a += vec[i].second;
if(k <= a){ //境目を探す
cout << vec[i].first << endl;
return 0;
}
}
}
D問題