Cod sursa(job #1488039)

Utilizator serbanSlincu Serban serban Data 17 septembrie 2015 20:01:03
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

vector<int> H[666013];

int caut(int who, int wh, int p, int q) {
    if(p > q)
        return p;
    int m = (q - p) / 2 + p;
    if(H[wh][m] > who) {
        caut(who, wh, p, m - 1);
    }
    else if(H[wh][m] < who) {
        caut(who, wh, m + 1, q);
    }
    else return m;
}

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);
        int r = x % 666013;
        int unde = caut(x, r, 0, H[r].size() - 1);
        if(op == 1) {
            if(!H[r].size() || H[r][unde] != x)
                H[r].push_back(x);
        }
        else if(op == 2) {
            if(H[r].size() && H[r][unde] == x) {
                for(int i = unde; i < H[r].size() - 1; i ++)
                    H[r][i] = H[r][i + 1];
                H[r].erase(H[r].end() - 1);
            }
        }
        else {
            if(H[r].size() && H[r][unde] == x)
                fprintf(g, "1\n");
            else fprintf(g, "0\n");
        }
        n --;
    }
    return 0;
}