您的位置:首页 > 其它

codeforces 631C. Report

2016-03-04 13:11 344 查看
题目链接按题目给出的r,维护一个递减的数列,然后在末尾补一个0。比如样例给出的
42
1243
23
12

递减的数列就是320,操作的时候,先变[3,2),然后变[2,0),具体的过程看代码。

#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<string>
#include<queue>
#include<stack>
#include<bitset>
usingnamespacestd;
#definepb(x)push_back(x)
#definelllonglong
#definemk(x,y)make_pair(x,y)
#definelsonl,m,rt<<1
#definemem(a)memset(a,0,sizeof(a))
#definersonm+1,r,rt<<1|1
#definemem1(a)memset(a,-1,sizeof(a))
#definemem2(a)memset(a,0x3f,sizeof(a))
#definerep(i,n,a)for(inti=a;i<n;i++)
#definefifirst
#definesesecond
typedefpair<int,int>pll;
constdoublePI=acos(-1.0);
constdoubleeps=1e-8;
constintmod=1e9+7;
constintinf=1061109567;
constintdir[][2]={{-1,0},{1,0},{0,-1},{0,1}};
constintmaxn=2e5+5;
intst[200005],a[maxn],b[maxn],c[maxn];
intmain()
{
intn,m,sign,pos;
cin>>n>>m;
for(inti=1;i<=n;i++)
scanf("%d",&a[i]);
intr=0;
for(inti=0;i<m;i++){
scanf("%d%d",&sign,&pos);
while(r>0&&pos>=st[r-1])
r--;
st[r]=pos,b[r]=sign;
r++;
}
st[r++]=0;
intl=1,rr=st[0];
for(inti=1;i<=n;i++)
c[i]=a[i];
sort(c+1,c+1+rr);
for(inti=1;i<r;i++){
for(intj=st[i-1];j>st[i];j--){
a[j]=(b[i-1]==2)?c[l++]:c[rr--];
}
}
for(inti=1;i<=n;i++)
printf("%d",a[i]);
return0;
}

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: