Cod sursa(job #1488027)

Utilizator serbanSlincu Serban serban Data 17 septembrie 2015 19:47:55
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
#define itt std::vector<int>::iterator

using namespace std;

int Z = -1;
vector<int> v;

int poz(int x, int p, int q) {
    if(p > q) {
        return min(Z, p);
    }
    int m = (q - p) / 2 + p;
    if(v.at(m) > x) {
        return poz(x, p, m - 1);
    }
    else if(v.at(m) < x)
        return poz(x, m + 1, q);
    else return m;
}

void bag(int x) {
    if(Z == -1)
        v.push_back(x), Z++, sort(v.begin(), v.end());
    else {
    int p = poz(x, 0, Z);
    if(v.at(p) != x)
        v.push_back(x), Z++, sort(v.begin(), v.end());
    }
}

void scot(int x) {
    if(Z == -1) return;
    int p = poz(x, 0, Z);
    if(v.at(p) == x) {
        for(int i = p; i < Z; i ++)
            v.at(i) = v.at(i + 1);
        v.erase(v.end() - 1);
        Z--;
    }
}

int main()
{
    FILE *f = fopen("hashuri.in", "r");
    FILE *g = fopen("hashuri.out", "w");
    int n, op, x;
    fscanf(f, "%d", &n);
    while(n) {
        fscanf(f, "%d %d", &op, &x);
        if(op == 1) bag(x);
        else if(op == 2) scot(x);
        else {
            if(Z == -1) fprintf(g, "0\n");
            else {
                int p = poz(x, 0, Z);
                if(v[p] == x)
                    fprintf(g, "1\n");
                else fprintf(g, "0\n");
            }
        }
        n --;
    }
    return 0;
}