Implement C arg parsing with getopt_long
parent
530da23dfc
commit
74b018bf1c
@ -1,7 +1,42 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
#include <sqlite3.h>
|
||||
#include "segmenttree.h"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
printf("Hello!");
|
||||
char *file = "cards";
|
||||
bool verbose = false;
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"file", required_argument, 0, 'f'},
|
||||
{"verbose", no_argument, 0, 'v'}
|
||||
};
|
||||
while (1) {
|
||||
int option_index = 0;
|
||||
int c = getopt_long(argc, argv, "f:v", long_options, &option_index);
|
||||
if (c == -1) break;
|
||||
switch (c) {
|
||||
case 'f': file = strdup(optarg); break;
|
||||
case 'v': verbose = true; break;
|
||||
default: abort();
|
||||
}
|
||||
}
|
||||
|
||||
printf("%s", file);
|
||||
|
||||
sqlite3 *db;
|
||||
int rc = sqlite3_open(file, &db);
|
||||
if (rc) {
|
||||
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
|
||||
abort();
|
||||
}
|
||||
fprintf(stderr, "Opened database successfully\n");
|
||||
|
||||
//int N = sqlite3_exec(db, "SELECT COUNT(*) FROM cards", callback)
|
||||
|
||||
sqlite3_close(db);
|
||||
}
|
||||
|
@ -0,0 +1,46 @@
|
||||
struct SegmentTree {
|
||||
int N;
|
||||
int * seg;
|
||||
}
|
||||
|
||||
// Build segment tree
|
||||
void Build(int l, int r, int n) {
|
||||
if (l == r) {
|
||||
|
||||
}
|
||||
int m = l + r >> 1;
|
||||
Build(l, m, n << 1);
|
||||
Build(m + 1, r, n << 1 | 1);
|
||||
seg[n] = seg[n << 1] + seg[n << 1 | 1];
|
||||
}
|
||||
|
||||
// Update value at index x
|
||||
void Update(int x, int v, int l, int r, int n) {
|
||||
if (l == r) {
|
||||
seg[n] += v;
|
||||
return;
|
||||
}
|
||||
int m = l + r >> 1;
|
||||
if (x <= m) {
|
||||
Update(x, v, l, m, n<<1);
|
||||
}
|
||||
else {
|
||||
Update(x, v, m+1, r, n<<1|1);
|
||||
}
|
||||
seg[n] = seg[n << 1] + seg[n << 1 | 1];
|
||||
}
|
||||
|
||||
// Find element with prefix sum v
|
||||
int Query(int v, int l, int r, int n) {
|
||||
if (l == r) {
|
||||
return s.seg[n], l;
|
||||
}
|
||||
int m = l + r >> 1;
|
||||
if (seg[n << 1] >= v) {
|
||||
return Query(v, l, m, n << 1);
|
||||
}
|
||||
else {
|
||||
return Query(v - s.seg[n << 1], m + 1, r, n << 1 | 1);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue