本文整理汇总了C++中multiset::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ multiset::clear方法的具体用法?C++ multiset::clear怎么用?C++ multiset::clear使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类multiset
的用法示例。
在下文中一共展示了multiset::clear方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
while(~scanf("%d%d%d%d",&w,&h,&n,&m))
{
for(int i=1;i<=n;i++)
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
square[i].l = min(x1,x2);
square[i].r = max(x1,x2);
square[i].b = min(y1,y2);
square[i].t = max(y1,y2);
}
V.clear();
for(int i=1;i<=n;i++)
{
V.push_back(Node(square[i].t,square[i].b,1,square[i].l));
V.push_back(Node(square[i].t,square[i].b,-1,square[i].r+1));
}
V.push_back(Node(1,h,1,w+1));
sort(V.begin(),V.end());
int xx = 0,pre = -1;
long long ans = 0;
S.clear();
S.insert(setNode(0,0));
S.insert(setNode(h+1,h+1));
int width = h-m+1 > 0 ? h-m+1 : 0;
while(xx < V.size())
{
while(xx+1 < V.size() && V[xx].pos == V[xx+1].pos) xx++;
ans += (long long)width * (long long)(V[xx].pos - (pre == -1 ? 1 : V[pre].pos));
for(int i=pre+1;i<=xx;i++)
{
if(V[i].kind == 1)
{
multiset<setNode>::iterator It1 = S.upper_bound(setNode(V[i].top,V[i].bot));
multiset<setNode>::iterator It2 = --It1;++It1;
width -= It1->bot - It2->top - m > 0 ? It1->bot - It2->top - m : 0;
width += It1->bot - V[i].top - m > 0 ? It1->bot - V[i].top - m : 0;
width += V[i].bot - It2->top - m > 0 ? V[i].bot - It2->top - m : 0;
S.insert(setNode(V[i].top,V[i].bot));
}
else if(V[i].kind == -1)
{
multiset<setNode>::iterator It1 = S.find(setNode(V[i].top,V[i].bot));if(It1 == S.end())while(1);
multiset<setNode>::iterator It2 = --It1;++It1;
multiset<setNode>::iterator It3 = ++It1;--It1;
width -= It3->bot - It1->top - m > 0 ? It3->bot - It1->top - m : 0;
width -= It1->bot - It2->top - m > 0 ? It1->bot - It2->top - m : 0;
width += It3->bot - It2->top - m > 0 ? It3->bot - It2->top - m : 0;
S.erase(It1);
}
}
pre = xx;
xx++;
}
//-------------------------------------------
if(m == 1) goto Print;
V.clear();
for(int i=1;i<=n;i++)
{
V.push_back(Node(square[i].r,square[i].l,1,square[i].b));
V.push_back(Node(square[i].r,square[i].l,-1,square[i].t+1));
}
V.push_back(Node(1,w,1,h+1));
sort(V.begin(),V.end());
xx = 0,pre = -1;
S.clear();
S.insert(setNode(0,0));
S.insert(setNode(w+1,w+1));
width = w-m+1 > 0 ? w-m+1 : 0;
while(xx < V.size())
{
while(xx+1 < V.size() && V[xx].pos == V[xx+1].pos) xx++;
ans += (long long)width * (long long)(V[xx].pos - (pre == -1 ? 1 : V[pre].pos));
for(int i=pre+1;i<=xx;i++)
{
if(V[i].kind == 1)
{
set<setNode>::iterator It1 = S.upper_bound(setNode(V[i].top,V[i].bot));
set<setNode>::iterator It2 = --It1;++It1;
width -= It1->bot - It2->top - m > 0 ? It1->bot - It2->top - m : 0;
width += It1->bot - V[i].top - m > 0 ? It1->bot - V[i].top - m : 0;
width += V[i].bot - It2->top - m > 0 ? V[i].bot - It2->top - m : 0;
S.insert(setNode(V[i].top,V[i].bot));
}
else if(V[i].kind == -1)
//.........这里部分代码省略.........
示例2: MAIN
void MAIN()
{
int cases;
pree();
scanf("%d",&cases);
int tn,cct,vct;
int i,j;
for(int t=1;t<=cases;++t)
{
ansc.clear();
ansv.clear();
scanf("%d",&n);
cct=n/2;
vct=n-cct;
tn=n;
for(i=0;i<v.size();++i)
{
for(j=0;j<min(21,vct);++j)
{
//printf("%c\n",v[i].second);
ansv.insert(v[i].second);
}
vct-=j;
}
for(i=0;i<c.size();++i)
{
for(j=0;j<min(5,cct);++j)
{
//printf("%c\n",c[i].second);
ansc.insert(c[i].second);
}
cct-=j;
}
printf("Case %d: ",t);
sit1=ansv.begin();
sit2=ansc.begin();
//printf("%d\t%d\n",anv.size())
for(i=0;i<n;++i)
{
if(i&1)
{
printf("%c",*sit2);
++sit2;
}
else
{
printf("%c",*sit1);
++sit1;
}
}
printf("\n");
}
}
示例3: main
int main()
{
freopen("in", "r", stdin);
freopen("std", "w", stdout);
tree.clear();
while (1)
{
int operation;
scanf("%d", &operation);
if (operation == -1)
{
return 0;
}
/*
else if (operation == 0)
{
tree.clear();
}
*/
else if (operation == 0)
{
int key;
scanf("%d", &key);
tree.insert(key);
}
else if (operation == 1)
{
int key;
scanf("%d", &key);
multiset<int>::iterator it = tree.find(key);
if (it != tree.end())
{
tree.erase(it);
printf("OK\n");
}
else
printf("Delete Error\n");
}
else if (operation == 2)
{
int key;
scanf("%d", &key);
multiset<int>::iterator it = tree.find(key);
if (it != tree.end())
printf("Yes\n");
else
printf("No\n");
}
/*
else if (operation == 4)
{
int key;
scanf("%d", &key);
multiset<int>::iterator it = tree.find(key);
if (it != tree.end())
{
-- it;
printf("%d\n", *it);
}
else
printf("Prev Error!\n");
}
else if (operation == 5)
{
int key;
scanf("%d", &key);
multiset<int>::iterator it = tree.find(key);
if (it != tree.end())
{
++ it;
printf("%d\n", *it);
}
else
printf("Succ Error!\n");
}
*/
else if (operation == 3)
{
if (tree.empty())
printf("NULL\n");
else
{
multiset<int>::reverse_iterator it = tree.rbegin();
printf("%d\n", *it);
}
}
else if (operation == 4)
{
if (tree.empty())
printf("NULL\n");
else
{
multiset<int>::iterator it = tree.begin();
printf("%d\n", *it);
}
}
}
return 0;
}
示例4: main
int main(){
powB[0] = powB2[0] = 1;
for(int i = 1;i < MAXL;++i){
powB[i] = B * powB[i - 1];
powB2[i] = B * powB2[i - 1] % MOD;
}
int T,L;
scanf("%d",&T);
while(T--){
scanf("%s",s);
L = strlen(s);
H[L] = H3[L] = 0;
for(int i = L - 1;i >= 0;--i){
H[i] = ((s[i] >= 'a' && s[i] <= 'z')? s[i] - 'a' : s[i] - 'A' + 26) + B * H[i + 1];
H3[i] = (((s[i] >= 'a' && s[i] <= 'z')? s[i] - 'a' : s[i] - 'A' + 26) + B * H3[i + 1]) % MOD;
}
H2[0] = H4[0] = 0;
for(int i = 0;i < L;++i){
H2[i + 1] = ((s[i] >= 'a' && s[i] <= 'z')? s[i] - 'a' : s[i] - 'A' + 26) + B * H2[i];
H4[i + 1] = (((s[i] >= 'a' && s[i] <= 'z')? s[i] - 'a' : s[i] - 'A' + 26) + B * H4[i]) % MOD;
}
for(int i = 0;i < L;++i){
int lo = 0,hi = min(i + 1,L - i - 1),mi;
while(lo < hi){
mi = (lo + hi + 1) >> 1;
if(get_hash3(i - mi + 1,i) != get_hash4(i + 1,i + mi)) hi = mi - 1;
else lo = mi;
}
r[i] = lo;
}
int Q = 0;
vq.clear();
in.clear();
out.clear();
for(int i = 0;i < L;++i){
if(r[i]){
int r2 = r[i] / 2;
vq.push_back(make_pair(i,i + 1 - r2));
in.push_back(make_pair(i + 1,i));
out.push_back(make_pair(i + r[i] + 1,i));
++Q;
}
}
sort(vq.begin(),vq.end());
sort(in.begin(),in.end());
sort(out.begin(),out.end());
S.clear();
int ans = 0;
for(int i = 0,p1 = 0,p2 = 0,p3 = 0;i < L;++i){
while(p3 < Q && out[p3].first == i){
it = S.find(out[p3].first - r[ out[p3].second ]);
S.erase(it);
++p3;
}
while(p2 < Q && in[p2].first == i){
S.insert(in[p2].first);
++p2;
}
while(p1 < Q && vq[p1].first == i){
it = S.lower_bound( vq[p1].second );
if(it != S.end()) ans = max(ans,i - *it + 1);
++p1;
}
}
printf("%d\n",ans * 4);
}
return 0;
}
示例5: MedianFinder
/** initialize your data structure here. */
MedianFinder()
{
Small.clear();
Large.clear();
}
示例6: main
int main(){
while (~scanf("%d%d",&n,&m)){
S.clear();
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
S.insert(a[i]);
}
if (n==1){
printf("1\n%d\n",a[1]);
continue;
}
if (n==2){
if (a[1]+a[2]>m)
printf("2\n%d %d\n",a[1],a[2]);
else
printf("1\n%d %d\n",a[1],a[2]);
continue;
}
memset(bi,true,sizeof(bi));
sort(a+1,a+n+1);
b[2]=a[n];
multiset<int>::iterator it;
/*
it=S.lower_bound(b[2]);
S.erase(it);
it=S.upper_bound(m-b[2]);
if (it==S.end()) --it;
b[1]=(*it);
S.erase(it);
for (int i=2;i<n;++i){
it=S.upper_bound(m-b[i]);
if (it==S.end()) --it;
b[i+1]=(*it);
S.erase(it);
}
*/
bool flag=true;
for (int i=1;i<=n;i++)
{
if (flag)
{
if (i<n)
{
it=S.end();it--;
b[i+1]=(*it);
S.erase(it);
it=S.upper_bound(m-b[i+1]);
if (it==S.end()) it=S.begin();
b[i]=(*it);
S.erase(it);
i++;
if (b[i-1]+b[i]<=m)
flag=true;
else flag=false;
}
else
{
it=S.begin();
b[i]=(*it);
S.erase(it);
}
}
else
{
it=S.upper_bound(m-b[i-1]);
if (it==S.end())
{
it=S.begin();
flag=true;
}
else flag=false;
b[i]=(*it);
S.erase(it);
}
}
int ans=0;
b[n+1]=0;
for (int i=1;i<=n;++i){
if (b[i]+b[i+1]<=m) i++;
ans++;
}
printf("%d\n",ans);
for (int i=1;i<=n;++i) printf("%d%c",b[i],i==n?'\n':' ');
}
return 0;
}
示例7:
multiset<int> reinit_set(multiset<int> ackset)
{
ackset.clear();
return ackset;
}
示例8: main
int main(){
bool first = true;
int i, x;
scanf("%d", &N);
while (N--){
if (!first) putchar('\n');
first = false;
G.clear();
B.clear();
scanf("%d %d %d", &BT, &SG, &SB);
for (i = 0; i < SG; i++){
scanf("%d", &x);
G.insert(x);
}
for (i = 0; i < SB; i++){
scanf("%d", &x);
B.insert(x);
}
while (G.size() && B.size()){
auto git = G.begin(), bit = B.begin();
Ga.clear();
Ba.clear();
for (i = 0; i < BT && G.size() && B.size(); i++){
int g = *git;
int b = *bit;
git = G.erase(git);
bit = B.erase(bit);
if (b > g)
Ba.push_back(b - g);
else if (b < g)
Ga.push_back(g - b);
}
G.insert(Ga.begin(), Ga.end());
B.insert(Ba.begin(), Ba.end());
}
auto &x = G;
if (!G.size() && !B.size())
printf("green and blue died\n");
else if (G.size()){
printf("green wins\n");
x = G;
} else {
printf("blue wins\n");
x = B;
}
for (auto it = x.begin(); it != x.end(); it++)
printf("%d\n", *it);
}
}
示例9: main
int main(){
int i,j,k,l,test,t=1;
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&test);
while(test--){
scanf("%d",&n);
set1.clear();
printf("Case #%d:\n",t++);
int li,ci;
for(i=1;i<=n;i++){
scanf("%d %d",&li,&ci);
pii now=mp(li,ci);
if(set1.find(now)!=set1.end()){
set1.insert(now);
printf("%d\n",set1.size());
continue;
}
//printf("\n%d %d\n",li,ci);
while(set1.size()){
it=set1.upper_bound(now);
//printf("it= %d-%d\n ",(*it).uu,(*it).vv);
if(it==set1.end()){
break;
}
else if((*it).vv>=ci){
set1.erase(it);
}
else break;
}
it=set1.upper_bound(now);
if(it==set1.begin()){
set1.insert(now);
}
else{
it--;
if((*it).vv>ci){
set1.insert(now);
}
}
for(it=set1.begin();it!=set1.end();it++){
// printf("%d-%d ",(*it).uu,(*it).vv);
}
//puts("");
printf("%d\n",set1.size());
continue;
}
if(test) puts("");
}
return 0;
}
示例10: solve
void solve() {
scanf("%d", &n);
axis_cnt = 0;
memset(cntA, 0, sizeof(cntA));
memset(cntB, 0, sizeof(cntB));
int totA = 0, totB = 0;
for ( int i = 1; i <= n; i ++ ) {
scanf("%d", &x[i]);
axis[axis_cnt ++] = x[i];
}
sort(axis, axis + axis_cnt);
axis_cnt = unique(axis, axis + axis_cnt) - axis;
for ( int i = 1; i <= n; i ++ )
x[i] = lower_bound(axis, axis + axis_cnt, x[i]) - axis;
scanf("%d%d", &A, &B);
for ( int st = 1; st + A - 1 <= n; st ++ ) {
static multiset<int> S;
S.clear();
for ( int i = st; i <= st + A - 1; i ++ )
S.insert(x[i]);
int mx = *(-- S.end());
cntA[mx] ++;
totA ++;
for ( int en = st + A; en <= n; en ++ ) {
if ( x[en] < mx ) {
S.erase(-- S.end());
S.insert(x[en]);
mx = *(-- S.end());
}
cntA[mx] ++;
totA ++;
}
}
for ( int st = 1; st + B - 1 <= n; st ++ ) {
static multiset<int> S;
S.clear();
for ( int i = st; i <= st + B - 1; i ++ )
S.insert(x[i]);
int mx = *(-- S.end());
cntB[mx] ++;
totB ++;
for ( int en = st + B; en <= n; en ++ ) {
if ( x[en] < mx ) {
S.erase(-- S.end());
S.insert(x[en]);
mx = *(-- S.end());
}
cntB[mx] ++;
totB ++;
}
}
double res = 0;
for ( int i = 0; i < axis_cnt; i ++ )
for ( int j = 0; j < axis_cnt; j ++ ) {
double prob = ((double)cntA[i] / totA) * ((double)cntB[j] / totB);
if ( i > j )
res += prob;
else if ( i == j )
res += 0.5 * prob;
}
printf("%.6lf\n", res);
}