Codeforces Round #344 (Div. 2) C. Report

来源:互联网 发布:苹果电脑如何装windows 编辑:程序博客网 时间:2024/05/16 10:16
题意:

给你一个长度为n的初始的序列和q个操作((1 ≤ n,q ≤ 200000),一个操作包括tiri,ti1表示从小到大,ti2表示从大到小,ri表示对前面多少个进行排序。

 

思路:如果后面的操作长度比前面的长度要大,那么可以知道前面的操作便是无效的,那么如果前面的操作是有效的话,他比后面操作最大的序列长度要大,那么他比后面的最大的序列长度大的那一部分便可以直接确定了,因为有效的操作序列一定是单调递减的。

#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <ctime>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define inf -0x3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define mem(a, b) memset(a, b, sizeof(a))const int M=1e9+7;const int maxn=200100;int a[maxn];bool cmp(int x,int y){    return x>y;}struct node{    int op;    int id;}line[maxn];int num[maxn];int C[maxn];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF){        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        int minv=0;        for(int i=1;i<=m;i++){            scanf("%d%d",&line[i].op,&line[i].id);            minv=max(line[i].id,minv);        }        int maxv=0;        for(int i=m;i>=1;i--){            num[i]=maxv;            maxv=max(maxv,line[i].id);        }        for(int i=1;i<=maxv;i++)            C[i]=a[i];        int st=1,ed=maxv;        sort(C+1,C+maxv+1);        for(int i=1;i<=m;i++){            if(line[i].id<=num[i])                continue;            if(line[i].op==1){  //xiao dao da                int j,k;                for(j=0;line[i].id-j>num[i];j++){                    a[line[i].id-j]=C[ed];                    ed--;                }            }            else{   //da dao xiao                int j;                for(j=0;line[i].id-j>num[i];j++){                    a[line[i].id-j]=C[st];                    st++;                }            }        }        for(int i=1;i<=n;i++){            if(i==1)                printf("%d",a[i]);            else                printf(" %d",a[i]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击