祝福大家2018新年快乐,

首先道习题博客!!

近年发觉了一个新意的本子JtSQL(java编写)

顿时同一鸣题比较简单。

开源地址也:https://github.com/noear/JtSQL

题目就是是输入一个数列。

JtSQL 特点:
*.结合了JS、SQL、模板理念;
*.保持了JS和SQL的语法高亮(利于DBA审核);
*.方便统一管理、部署、运行
*.像存储过程一样,提供当前上下文及变量支持;
*.像SQL客户端工具一样,即时编写即经常运行;
*.像定制统计程序一样,提供经过及逻辑控制能力;
*.服务端运行(变误会成客户端运行啊…) 

不怕是各个插入一个,找到前面插入了之跟之差最小的价,将她们之差值加入答案。

 

这里可以想到平衡树。

统计 1

各个一样赖输入,加进treap中,然后搜索她的先驱者和晚,比较他们的差值大小,小之在答案。

审在工作中总会碰到这么的题材

要treap不知底的口舌,可以拘留自己的前方一模一样篇博客:http://www.cnblogs.com/justin-cao/p/8270272.html

常常去拉sql,有时候一句sql执行为不定
就得分多次sql,

贴一波代码:

写sql写的心累。把JavaScript
和 sql 结合起来着实怪赞。能化解一直困扰的问题

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<ctime>
 6 using namespace std;
 7 int n,root,size;
 8 long long ans,sum;
 9 long long inf=1000005;
10 long long a[50010];
11 struct P{
12     int l,r,sz,re,key,rd;
13 }t[50010];
14 void update(int k)
15 {
16     t[k].sz=t[t[k].l].sz+t[t[k].r].sz+t[k].re;
17 }
18 void left(int &k)
19 {
20     int y=t[k].r;
21     t[k].r=t[y].l;
22     t[y].l=k;
23     t[y].sz=t[k].sz;
24     update(k);
25     k=y;
26 }
27 void right(int &k)
28 {
29     int y=t[k].l;
30     t[k].l=t[y].r;
31     t[y].r=k;
32     t[y].sz=t[k].sz;
33     update(k);
34     k=y;
35 }
36 void init(int &k,int x)
37 {
38     if(k==0)
39     {
40         size++;
41         k=size;
42         t[k].sz=1;
43         t[k].re=1;
44         t[k].key=x;
45         t[k].rd=rand();
46         return;
47     }
48     t[k].sz++;
49     if(t[k].key==x)   t[k].re++;
50     else{
51         if(x>t[k].key)
52         {
53             init(t[k].r,x);
54             if(t[t[k].r].rd<t[k].rd)    left(k);
55         }
56         else{
57             init(t[k].l,x);
58             if(t[t[k].l].rd<t[k].rd)    right(k);
59         }
60     }
61 }
62 void pre(int k,int x)
63 {
64     if(k==0)  return;
65     if(t[k].key<=x)
66     {
67          ans=k;
68          pre(t[k].r,x);
69     }
70     else pre(t[k].l,x);
71 }
72 void nxt(int k,int x)
73 {
74     if(k==0)  return;
75     if(t[k].key>=x)
76     {
77         ans=k;
78         nxt(t[k].l,x);
79     }
80     else nxt(t[k].r,x);
81 }
82 int main()
83 {
84     srand(0);
85     scanf("%d",&n);
86     t[0].key=inf;
87     for(int i=1;i<=n;i++)  scanf("%lld",&a[i]);
88     init(root,a[1]);
89     for(int i=2;i<=n;i++)
90     {
91         pre(root,a[i]);
92         int x=ans;
93         nxt(root,a[i]);
94         sum+=(long long)min(abs(a[i]-t[x].key),abs(t[ans].key-a[i]));
95         init(root,a[i]);
96     }
97     printf("%lld",sum+a[1]);
98     return 0;
99 }

因为这个呢创意点我为闹了一个家伙 我取名吧tabris脚本工具

题目链接:https://www.luogu.org/problemnew/show/2234或https://vjudge.net/problem/HYSBZ-1588

开源地址也:https://github.com/yuzd/ClearScript.Manager

多谢观看。

(ps:大家发出建议尽管提)

比方产生尴尬指出,请尽管提出,感激不尽!

特色:

 

1 包含JtSQL的享有特性

2 利用微软的
ClearScript V8 engine

详尽请参见:https://microsoft.github.io/ClearScript/Tutorial/FAQtorial.html?from=timeline&isappinstalled=0

ClearScript很强大可以就c# 与 JavaScript 互通

3 把功能模块化
目前曾经落实之3独第一的模块

  1. 执行http请求处理模块

  2. 日志输出处理模块

  3. 实施sql处理模块.

  4. js代码智能提醒tabris模块

统计 2

统计 3

从此想用外的机能都得以扩大外模块

 

  1. 代码编写采用CodeMirror
    ,写js代码智能提醒

 

 

脚来一个动图感受下吧

因为以下场景也示范

 

 统计 4

 

 

统计 5

 

 统计 6

 

包装的sql log http 三很组件 在编辑器上的方式会代码智能提醒 

统计 7

 

统计 8

 

统计 9

 

//DB处理器
var db = this.tabris.create('SQL', {
  name:'testorm',
  type:'mysql'
});

//http处理器
var http = this.tabris.create('HTTP', {
  method:'GET'
});

//log处理器
var log = this.tabris.create('LOG', {
  trace:true
});

db.delete('delete from child_district');

//从district表里面获取所有城市的Code
var get_district_sql = "select Code from district";

var district_code_list = db.query(get_district_sql);

for (var index = 0; index < district_code_list.length; index++) {
    getChildDistrictAndInsertToDb(district_code_list[index].Code);
}


//远程获取
function getChildDistrictAndInsertToDb(parentCode){
  log.info(parentCode);
  var re = http.getJson({
    url:'https://fuwu.sf-express.com/service/address/newAddr/getNewSubAddress?parentCode=' + parentCode
  });
  if(!re.subAddressList || !re.subAddressList.length) return;
  for (var index = 0; index < re.subAddressList.length; index++) {
    var child = re.subAddressList[index];
    var insertSql = "insert into child_district (Name,Code,DataChange_LastTime) VALUES('"+ child.distCnName +"','"+ child.distCode +"',now())";
    var insertResult = db.insert(insertSql)
    if(insertResult!=1){
      log.error(child.distCnName + '插入db失败!');
    }else{
      log.info(child.distCnName + '插入db成功!')
    }
  }
}

 

客户端下载

最新版:https://github.com/yuzd/ClearScript.Manager/tree/master/src/Tabris.Winform/Release