本文整理汇总了C++中SegmentTree::build方法的典型用法代码示例。如果您正苦于以下问题:C++ SegmentTree::build方法的具体用法?C++ SegmentTree::build怎么用?C++ SegmentTree::build使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SegmentTree
的用法示例。
在下文中一共展示了SegmentTree::build方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
int T;
scanf("%d", &T);
for(int ck=1; ck<=T; ck++)
{
scanf("%d", &N);
scanf("%*s%*s");
scanf("%d", &Q);
tree.build(1,1,N);
for(int i=1; i<=Q; i++)
{
int opt,a,b;
scanf("%d%d%d", &opt, &a, &b);
if(opt)
{
printf("%d\n", tree.query(1,a,b));
}
else
{
tree.update(1,a,a,b);
}
}
scanf("%*s%*s");
scanf("%d", &Q);
tree.build(1,1,N);
for(int i=1; i<=Q; i++)
{
int opt,a,b,c;
scanf("%d", &opt);
if(opt)
{
scanf("%d", &a);
printf("%d\n", tree.query(1,a,a));
}
else
{
scanf("%d%d%d", &a, &b, &c);
tree.update(1,a,b,c);
}
}
}
return 0;
}
示例2: main
int main()
{
#ifdef LOCAL
// freopen("1008.in", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
int T;
scanf("%d", &T);
for(int ck=1; ck<=T; ck++)
{
scanf("%d%d", &N, &M);
for(int i=1; i<=N; i++) scanf("%d", &A[i]);
tree.len=N;
tree.build();
for(int i=1,opt,l,r,x; i<=M; i++)
{
scanf("%d%d%d", &opt, &l, &r);
if(opt==1) {scanf("%d", &x); tree.add(l,r,x);}
if(opt==2) {tree.rsqrt(l,r);}
if(opt==3) {printf("%lld\n", tree.sum(l,r));}
// PCUT;
}
}
return 0;
}
示例3: init
void init(Graph *g)
{
G=g;
dfst=0;
CLR(dfsn); CLR(dept); CLR(size); CLR(bson); CLR(fath); CLR(ntop);
CLR(pval); CLR(sque);
dfs1(1);
dfs2(1,1);
tree.build(1,1,G->ndn,sque);
}
示例4: intervalMinNumber
/**
*@param A, queries: Given an integer array and an query list
*@return: The result list
*/
vector<int> intervalMinNumber(vector<int> &A, vector<Interval> &queries) {
// write your code here
vector<int> r;
SegmentTree st;
Node* root = st.build(A, 0, A.size()-1);
for(int i=0;i<queries.size();i++) {
Interval tmp = queries[i];
r.push_back(st.query(root, tmp.start, tmp.end));
}
return r;
}
示例5: main
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d %d %I64d", &rings[i].a, &rings[i].b, &rings[i].h);
}
sort(rings, rings + n);
n = merge();
tree.build(1, 0, n - 1);
for(int i = 0; i < n; i++) {
int update_idx = lower_bound(ranks.begin(), ranks.end(), rings[i].a) - ranks.begin();
int idx = lower_bound(ranks.begin(), ranks.end(), rings[i].b) - ranks.begin();
long long val = rings[i].h;
if(idx) {
val += tree.query(1, 0, idx - 1);
}
tree.update(1, update_idx, val);
}
printf("%I64d\n", tree.query(1, 0, n - 1));
return 0;
}
示例6: main
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d %d", &v[i].r, &v[i].h);
ranks[i] = i;
}
sort(ranks, ranks+n, cmp);
for(int i = 0; i < n; i++)
v[ranks[i]].i = i;
SegmentTree tree;
tree.build(1, 0, n-1);
long long ans = 0;
for(int i = 0; i < n ; i++) {
int r = v[i].i;
long long now = tree.query(1, 0, r) + v[i].r * 1LL * v[i].r * v[i].h;
ans = max(ans, now);
tree.update(1, r, now);
}
printf("%.9lf\n", pi * ans);
return 0;
}
示例7: main
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
scanf("%d",&n);
int cnt = 0;
for(int i=0; i<n; i++)
{
scanf("%d",&h[i]);
rec[cnt++] = h[i];
}
std::sort(rec,rec+cnt);
rcnt = 1;
for(int i=0; i<cnt; i++)
if(i == 0 || rec[i]!=rec[i-1])
{
real[rcnt++] = rec[i];
}
for(int i=0; i<n; i++)
conh[i] = find(h[i]);
SegmentTree sgt = SegmentTree();
sgt.build(1,0,n);
for(int i=0; i<n; i++)
{
int cur = sgt.query(1,conh[i]+1,n,1);
if(cur >= 0)
sgt.insert(1,conh[i],conh[i],0,cur+1);
// printf("to be low %d ",cur);
cur = sgt.query(1,0,conh[i]-1,0);
if(cur >= 0)
sgt.insert(1,conh[i],conh[i],1,cur+1);
// printf("to be high %d\n",cur);
}
int ans = Max(sgt.query(1,0,n,0),sgt.query(1,0,n,1));
printf("%d\n",ans);
}
return 0;
}
示例8: main
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
int T;
scanf("%d", &T);
for(int ck=1; ck<=T; ck++)
{
scanf("%d%d", &N, &M);
G.init(N);
for(int i=1; i<N; i++)
{
int u,v;
scanf("%d%d", &u, &v);
G.adde(u,v); G.adde(v,u);
}
hld.init(&G);
tree.build(1,1,N);
CLR(sum); CLR(dp);
for(int i=1; i<=N; i++) chain[i].clear();
for(int i=0; i<M; i++)
{
int x,y,w;
scanf("%d%d%d", &x, &y, &w);
chain[ hld.LCA(x,y) ].push_back(data(x, y, w));
}
DP(1,0);
printf("%d\n", dp[1]);
}
return 0;
}
示例9: main
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
while(~scanf("%s", str+1))
{
N = strlen(str+1);
tree.build(1,1,N);
scanf("%d", &Q);
for(int i=0; i<Q; i++) scanf("%d%d", &qry[i].l, &qry[i].r), qry[i].id=i;
CLR(near[0]);
for(int i=1; i<=N; i++)
{
for(int j=0; j<4; j++) near[i][j] = near[i-1][j];
for(int j=0; j<4; j++) if(str[i] == chr[j]) {near[i][j] = i; break;}
}
sort(qry, qry+Q);
int np=0;
for(int q=0; q<Q; q++)
{
printf("%d %d\n", qry[q].l, qry[q].r);
while(np<qry[q].r) expend(++np);
int res = tree.query(1,qry[q].l,qry[q].r);
printf("res: %d test:%d\n", res, tree.query(1,1,N));
int temp;
int lm = startE(temp=tree.leftmost(1,qry[q].l,qry[q].r)); // bug
printf("lm: %d lef: %d\n", lm, temp);
if(lm<qry[q].l && res) res--;
ans[qry[q].id] = res;
}
for(int q=0; q<Q; q++) printf("%d\n", ans[q]);
}
return 0;
}
示例10: Scan
void Scan(int flr)
{
tree.build(1,0,ais[flr].siz);
for(int i=0; i<isiz[flr]; i++)
{
// if(debug)
// {
// Object &now=inpt[flr][i];
// puts((inpt[flr][i].flag==WALL)?"wall":"bird");
// printf("%d: %d %d %d\n", now.id, now.u, now.v, now.h);
// }
if(inpt[flr][i].flag == WALL)
{
tree.update(1, ais[flr].id(inpt[flr][i].u), ais[flr].id(inpt[flr][i].v), inpt[flr][i].id, inpt[flr][i].h);
}
else
{
// if(debug)
// {
// printf("%d\n", ais[flr].siz);
// for(int i=0; i<ais[flr].siz; i++) printf("%d ", tree.query(1,i).first);puts("");
// for(int i=0; i<ais[flr].siz; i++) printf("%d ", tree.query(1,i).second);puts("");
// }
Pii info=tree.query(1, ais[flr].id(inpt[flr][i].u));
if(info.first==-1) continue;
// if(debug) printf("wid=%d\n", info.first);
int res, id;
id=inpt[flr][i].id;
res=abs(inpt[flr][i].h - info.second);
if(res < bird[0][id])
{
bird[0][id] = res;
bird[1][id] = info.first;
}
}
}
}