문제에 Codeforces 라운드 # 576 (사업부. 2) 솔루션

게임 링크 : https://codeforc.es/contest/1199
 
A. 도시 날
질문의 의미 : 열 수, 두 개의 정수 주어진 \ (X 축의 Y-의 \)는 , 최초 숫자의 일련 번호를 찾기 위해 질문 \ (d 개 \를 ) 등이 \ (D \) 를 만족 \ (a_d은 <a_j \) ( \ (DX \ 당량 J <D \) && \ (D <J \ 당량 D + Y \) ).

분석 : x와 y가 7보다 작은, 그래서 당신은 폭력을 지시 할 수 있기 때문에.

AC 코드 :

#include <bits/stdc++.h>
#define SIZE 200007
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
typedef long long ll;
void io() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}
ll n, x, y, a[SIZE];
int main() {
    io();
    cin >> n >> x >> y;
    rep(i, 1, n) cin >> a[i];
    rep(i, 1, n) {
        bool flag = 1;
        for (int k = i - 1, cnt = 1; k > 0 && cnt <= x; k--, cnt++) {
            if (a[k] <= a[i]) { flag = 0; break; }
        }
        for (int k = i + 1, cnt = 1; k <= n && cnt <= y; k++, cnt++) {
            if (a[k] <= a[i]) { flag = 0; break; }
        }
        if (flag) { cout << i << endl; return 0; }
    }
}

 
B. 수련

분석 : 푸시 식처럼, 물 문제를 기하학.

AC 코드 :

#include <bits/stdc++.h>
using namespace std;
int main() {
    double l, h;
    cin >> h >> l;
    double s = (l * l - h * h) / 2 / h;;
    printf("%.12lf", s);
}

 
C.의 MP3의
질문의 의미 : 배열이있는 경우 \ (K \) 다른 번호는 각 숫자가 공간 \ (log_2K \ K를 =) 총 메모리의 개수 설정 (NK을 \) \ , 당신은 이하의 수의 크기를 변경하는 기능 \ (L의 \)이 변경 될 수있다 (L의 \) \ 보다 크다 \ (R & 중위 \) 로 변경 될 수있다 (R & 중위 \)를 \ , 총 메모리 이제 주어진다, 변화의 최소 수를 찾는.

분석 : 첫째까지 예금을 찾을 수 있습니다 (케이 \) \ 우리가 분명히 사용, 번호 \ (맵 \)를 데이터, 다음 기록하는 \ (맵 \)를 전과 \ (케이 \) 수와 K 후 (우리는 적어도 제거하기 때문에 양방향 큐의 수에 던져 \ (케이 \) 수, 그리고 \ (케이 \) 이 단지 헤더 또는 트레일러 수) \ (2K \) 접두사 수요의 수를에, 각 K는 최소로 얻을 수있다.

AC 코드 :

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define SIZE 400007
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
typedef long long ll;
void io() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}
ll n, I, a[SIZE], pre[SIZE];
map<ll, ll> mp;
deque<pair<ll, ll> > q;
int main() {
    io(); cin >> n >> I;
    rep(i, 1, n) {
        cin >> a[i];
        ++mp[a[i]];
    }
    ll k = 0; I *= 8;   //用k记录最多存储几个数
    while (1ll * ceil(log2(mp.size() - k))* n > I) k++;
    auto it = mp.begin();
    auto itr = mp.rbegin();
    rep(i, 1, k) {
        q.push_back(make_pair(it->first, it->second));
        q.push_front(make_pair(itr->first, itr->second));
        it++, itr++;
    }
    auto itx = q.begin();
    rep(i, 1, q.size()) pre[i] = pre[i - 1] + itx++->second;
    ll sum = INF;
    rep(i, k, 2 * k) sum = min(sum, pre[i] - pre[i - k]);
    cout << sum;
}

 
D. 복지 국가
이탈리아 그 : 주어진 \ (\ N-) 열 수와 두 개의 작업을. 첫째, 일련 번호의 동작 \ (P는 \) 디지털로 변경된다 \ (X \) , 제 모든 미만 동작해야 \을 (X \) 를 디지털로 변경된다 \ (X \) . 일련의 최종 출력.

트리 라인처럼 언뜻 보면,하지만 것입니다 : 분석 (T \)를 \ 직접 잤어요 전에, 사실, (내가 아는 방법 묻지 마세요). 우리는 제 1 운전과 제 2 운전을 위해 우리는 따라서 두 개의 배열, 개방, 대형의 종류를 고려할 필요가 있음을 발견 \ (ㄱ \) , 배열 저장 작업을 \ (MAXX \) 마지막으로, 작업이 저장 배열 복용 \ (최대 \) 의 출력이 될 수있다.

AC 코드 :

#include<bits/stdc++.h>
#define SIZE 200007
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
typedef long long ll;
void io() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}
ll n, m, a[SIZE], b[SIZE], sig, maxx[SIZE], pos;
int main() {
    io(); cin >> n;
    rep(i, 1, n) cin >> a[i];
    cin >> m;
    rep(i, 1, m) {
        cin >> sig;
        if (sig == 1) {
            cin >> pos;
            cin >> a[pos];
            b[pos] = i;
        }
        else cin >> maxx[i];
    }
    for (int i = m; i; --i) maxx[i - 1] = max(maxx[i - 1], maxx[i]);
    rep(i, 1, n) cout << max(a[i], maxx[b[i]]) << ' ';
}

 
E. 독립 세트 대 일치
意题:

추천

출처www.cnblogs.com/st1vdy/p/11273191.html