Data structure is one of the basic skills for Computer Science students, which is a particular way of storing and organizing data in a computer so that it can be used efficiently. Today let me introduce a data-structure-like problem for you.
Original, there are N numbers, namely 1, 2, 3...N. Each round, iSea find out the Ki-th smallest number and take it away, your task is reporting him the total sum of the numbers he has taken away.
Original, there are N numbers, namely 1, 2, 3...N. Each round, iSea find out the Ki-th smallest number and take it away, your task is reporting him the total sum of the numbers he has taken away.
在一个含有1-n的序列中,每次找到第Ki小的数,并把它删除。InputThe first line contains a single integer T, indicating the number of test cases.
Each test case includes two integers N, K, K indicates the round numbers. Then a line with K numbers following, indicating in i (1-based) round, iSea take away the Ki-th smallest away.
Technical Specification
1. 1 <= T <= 128
2. 1 <= K <= N <= 262 144
3. 1 <= Ki <= N - i + 1
第一个数T,表示测试数据的组数。
每组测试数据,第一行2个整数n和m,m表示操作的轮数。
接下来m行,每行一个整数k,表示要找出第k小的数,并把它删除。OutputFor each test case, output the case number first, then the sum.
每组数据,输出一个整数,表示删除元素的总和。Sample Input
2 3 2 1 1 10 3 3 9 1
Sample Output
Case 1: 3 Case 2: 14
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<vector> #include<cmath> #include<string> #include<map> #include<queue> using namespace std; typedef long long ll; struct node{ ll l,r,sum; }a[1200000]; void update(ll k){ a[k].sum=a[k<<1].sum+a[k<<1|1].sum; return ; } //建树 void build(ll k,ll l,ll r){ a[k].l=l; a[k].r=r; if(l==r){ a[k].sum=1;//每个叶节点起初长度都为1 return ; } ll mid=(a[k].l+a[k].r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); update(k); return ; } ll ans; void query(ll k,ll x){ if(a[k].l==a[k].r){ a[k].sum=0; ans+=a[k].l; return ; } ll mid=(a[k].l+a[k].r)>>1; //首先在左孩子中找 if(x<=a[k<<1].sum){ query(k<<1,x); } else { //在右孩子中能够找记得变化 query(k<<1|1,x-a[k<<1].sum); } update(k); return ; } int main(){ ll t,cnt=1; cin>>t; while(t--){ ll n,c; cin>>n>>c; build(1,1,n); ll x; ans=0; for(ll i=1;i<=c;i++){ cin>>x; query(1,x); } cout<<"Case "<<cnt++<<": "<<ans<<endl; } return 0; } // / | / |**、 // / | / | // / |/ | / _____ ____ | / // /------ | |__/ / / / / | / // / | | / / / /______ |/ // / | | / / / | // / | | \_____/ / / \_____ | /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ Code is far away from bug with the animal protecting * ┃ ┃ 神兽保佑,代码无bug * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ */ // warm heart, wagging tail,and a smile just for you! // // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O = /O // ____/`---'\____ // .' | |// `. // / ||| : |||// // / _||||| -:- |||||- // | | \ - /// | | // | \_| ''---/'' | | // .-\__ `-` ___/-. / // ___`. .' /--.-- `. . __ // ."" '< `.___\_<|>_/___.' >'"". // | | : `- \`.;` _ /`;.`/ - ` : | | // `-. \_ __ /__ _/ .-` / / // ======`-.____`-.___\_____/___.-`____.-'====== // `=---=' // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //