1. 순차탐색과 이분탐색

#include <stdio.h>

int a[1010101];
int n, k;

int main()
{
    scanf("%d", &n);

    for (int i=1; i<=n; i++)
        scanf("%d", &a[i]);

    scanf("%d", &k);

    int b=0, c=0;

    for (int i=1; i<=n; i++)
    {
        b++;
        if (a[i] == k)  break;
    }

    int s=1, e=n;

    while (s <= e)
    {
        c++;
        int mid = (s+e)/2;
        
        if (a[mid] == k) break;
        else if (a[mid] > k) e = mid - 1;
        else s = mid + 1;
    }

    printf("%d %d", b, c);
}

2. 두 수 사이의 수 2

#include <stdio.h>
#include <algorithm>

using namespace std;

int arr[100000];

int lb(int s, int e, int k)
{
    int r = e+1;
    
    while (s <= e)
    {
        int m = (s+e)/2;
        if (arr[m] >= k)
        {
            r = m;
            e = m-1;
        }
        else
        {
            s = m+1;
        }
    }
    return r;
}

int ub(int s, int e, int k)
{
    int r = e+1;
    
    while (s <= e)
    {
        int m = (s+e)/2;
        if (arr[m] > k)
        {
            r = m;
            e = m-1;
        }
        else
        {
            s = m+1;
        }
    }
    return r;
}

int main()
{
    int n, q;
    scanf("%d %d", &n, &q);

    for (int i=0; i<n; i++)
        scanf("%d", &arr[i]);
    
    sort(arr, arr+n);

    while (q--)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        printf("%d\n", ub(0, n-1, b) - lb(0, n-1, a));
    }
}

3. 라운드 로빈

#include <stdio.h>
#include <queue>

using namespace std;

int main()
{
    int n, k;
    queue<pair<int, int>> q;

    scanf("%d %d", &n, &k);

    for (int i=1; i<=n; i++)
    {
        int v;
        scanf("%d", &v);

        q.push({i, v});
    }

    int ct = 0;

    while (!q.empty())
    {
        pair<int, int> p = q.front(); q.pop();
        if (p.second <= k)
        {
            ct += p.second;
            printf("%d %d\n", p.first, ct);
        }
        else
        {
            p.second -= k;
            ct += k;

            q.push(p);
        }
    }
}