zoukankan      html  css  js  c++  java
  • Points on Plane Codeforces

    https://www.luogu.org/problemnew/show/CF576C

    看题面,一眼按莫队的方法排一下

    直接交就会和我一样发现WA掉了。。。

    算一下会发现,上限是3e9(块内左端点1e9,块内右端点1e9,块间右端点移动1e9),大于题面的2.5e8

    (出题人还真的造出数据把它卡掉了。。而且好像是要让它FST的样子,那些数据在很后面。。)

    事实上,块间右端点移动是可以优化的!只要右端点一轮从坐标小的移到坐标大的,下一轮反过来,就可以减少这个1e9到一个相当少的数字

    简单的实现方法就是,偶数块中小的移到大的,奇数块中反过来

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 typedef pair<int,int> pii;
    13 
    14 int n;
    15 struct P
    16 {
    17     int fi,se,n;
    18 };
    19 P p[1001000];
    20 int bl[1001000];
    21 int sz;
    22 bool c1(const P &a,const P &b)
    23 {
    24     return bl[a.fi]==bl[b.fi]?((bl[a.fi]&1)?a.se<b.se:a.se>b.se):a.fi<b.fi;
    25 }
    26 int main()
    27 {
    28     int i;
    29     scanf("%d",&n);sz=1000;
    30     for(i=1;i<=n;i++)
    31     {
    32         scanf("%d%d",&p[i].fi,&p[i].se);p[i].n=i;
    33     }
    34     for(i=0;i<=1000000;i++)    bl[i]=i/sz;
    35     sort(p+1,p+n+1,c1);
    36     for(i=1;i<=n;i++)    printf("%d ",p[i].n);
    37     return 0;
    38 }
  • 相关阅读:
    数组
    js--函数
    for循环
    运算符
    js 正则表达式
    js DOM节点
    js 字符串
    js 函数
    2018-12-26 课堂笔记 for循环
    2018-12-25 课堂笔记 js
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9433617.html
Copyright © 2011-2022 走看看