zoukankan      html  css  js  c++  java
  • Vasya And Array CodeForces

    Vasya And Array

    题意:

    给你一个序列,再给你一些区间

    t = 1时说明这些区间时非递减的

    t = 0 时说明这些区间至少有一对数字 arr[i] > arr[i - 1]

    思路:

    只要左边的区间必然右边的区间大就好了 , 非递减区间中的数字都赋值为一样的数字

    因为n只有1000 , 把初值cnt赋值为1e6 , 每次给区间赋值的时候 -1000

    把第一种情况的区间赋值完成之后,剩下的还没有赋值的部分,都赋值为单调递减序列就可以了

      1 #include<cstdio>
      2 #include<string.h>
      3 #include<algorithm>
      4 #include<cmath>
      5 #include<iostream>
      6 #include<vector>
      7 #include<queue>
      8 #include<set>
      9 #include<map>
     10 #include<cctype>
     11 #define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
     12 #define mem(a,x) memset(a,x,sizeof(a))
     13 #define lson rt<<1,l,mid
     14 #define rson rt<<1|1,mid + 1,r
     15 #define P pair<int,int>
     16 #define ull unsigned long long
     17 using namespace std;
     18 typedef long long ll;
     19 const int maxn = 1e6 + 10;
     20 const ll mod = 998244353;
     21 const int inf = 0x3f3f3f3f;
     22 const long long INF = 0x3f3f3f3f3f3f3f3f;
     23 const double eps = 1e-7;
     24 inline ll read()
     25 {
     26     ll X = 0, w = 0; char ch = 0;
     27     while (!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }
     28     while (isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
     29     return w ? -X : X;
     30 }
     31 int arr[maxn] , brr[maxn];
     32 int n, m;
     33 struct node
     34 {
     35     int l, r, judge;
     36 }q[maxn];
     37 
     38 int cmp(struct node& a, struct node& b)
     39 {
     40     if (a.judge == b.judge) return a.l < b.l;
     41     return a.judge > b.judge;
     42 }
     43 int main()
     44 {
     45     while (~scanf("%d %d", &n, &m))
     46     {
     47         int cnt = 0;
     48         int flag = 1;
     49         for (int i = 1; i <= m; ++i)
     50         {
     51             q[i].judge = read(), q[i].l = read(), q[i].r = read();
     52         }
     53         sort(q + 1, q + 1 + m, cmp);
     54         for (int i = 1; i <= m; ++i)
     55         {
     56             if (q[i].judge == 1)
     57             {
     58                 if(arr[q[i].l] == 0) cnt -= 1000;
     59                 for (int j = q[i].l; j <= q[i].r; ++j) arr[j] = cnt;
     60             }
     61         }
     62         for (int i = 1; i <= n; ++i)
     63         {
     64             if (arr[i] == 0) arr[i] = arr[i - 1] - 1;
     65         }
     66         for (int i = 1; i <= m; ++i)
     67         {
     68             
     69             if (q[i].judge == 0)
     70             {
     71                 int tmp = 0;
     72                 for (int j = q[i].l; j < q[i].r; ++j)
     73                 {
     74                     if (arr[j] > arr[j + 1])
     75                     {
     76                         tmp = 1;
     77                         break;
     78                     }
     79                 }
     80                 if (tmp == 0)
     81                 {
     82                     flag = 0;
     83                     break;
     84                 }
     85             }
     86         }
     87         if (flag == 0)
     88         {
     89             cout << "No" << endl;
     90         }
     91         else
     92         {
     93             cout << "Yes" << endl;
     94             for (int i = 1; i <= n; ++i)
     95             {
     96                 cout << arr[i] + 1000000 << " ";
     97                 if (i == n) cout << endl;
     98             }
     99         }
    100         
    101     }
    102     return 0;
    103 }
    View Code
  • 相关阅读:
    【原创】Javascript-获取URL请求参数
    【原创】Javascript-显示系统时间
    【转载】ASP.NET 生成验证码
    【转载】Word2010编号列表&多级列表
    VirtualBox命令更改虚拟硬盘空间
    查看应用程序或服务端口号
    【原创】设置EXCEL2010打开多个独立窗口
    【原创】Word2010 清除样式
    【原创】打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"
    【转载】SQL Server XML Path
  • 原文地址:https://www.cnblogs.com/DreamACMer/p/12694167.html
Copyright © 2011-2022 走看看