• bzoj 1935


    很明显直接二维是作死的。。所以给按X点排下序,当然离线处理询问时差分的点会方便些。。

    对Y坐标就用BIT维护就行。。

    但由于坐标比较大,所以还要离散化= =

    处理起来略麻烦但代码并不难写

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<iostream>
     7 #define inc(i,l,r) for(int i=l;i<=r;i++)
     8 #define dec(i,l,r) for(int i=l;i>=r;i--)
     9 #define link(x) for(edge *j=h[x];j;j=j->next)
    10 #define mem(a) memset(a,0,sizeof(a))
    11 #define ll long long
    12 #define succ(x) (1<<x)
    13 #define lowbit(x) (x&(-x))
    14 #define NM 500000+5
    15 using namespace std;
    16 int read(){
    17     int x=0,f=1;char ch=getchar();
    18     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    19     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    20     return x*f;
    21 }
    22 struct tmp{
    23     int x,y,id,f;
    24 }a[5*NM];
    25 bool cmp(tmp x,tmp y){
    26     return x.x<y.x||(x.x==y.x&&x.id<y.id);
    27 }
    28 int _x,_y,__x,__y,b[5*NM],c[NM],ans[NM][5],tot,n,m,_t;
    29 void upd(int x,int t){
    30     for(;x<=n;x+=lowbit(x))c[x]+=t;
    31 }
    32 int sum(int x){
    33     int s=0;
    34     for(;x;x-=lowbit(x))s+=c[x];
    35     return s;
    36 }
    37 int main(){
    38     freopen("data.in","r",stdin);
    39     n=read();m=read();
    40     inc(i,1,n){
    41         a[++tot].x=read();a[tot].y=read();b[tot]=a[i].y;
    42     }
    43     inc(i,1,m){
    44         _x=read()-1;_y=read()-1;__x=read();__y=read();
    45         a[++tot].x=_x;a[tot].y=_y;b[tot]=_y;a[tot].id=i;a[tot].f=1;
    46         a[++tot].x=_x;a[tot].y=__y;b[tot]=__y;a[tot].id=i;a[tot].f=2;
    47         a[++tot].x=__x;a[tot].y=_y;b[tot]=_y;a[tot].id=i;a[tot].f=3;
    48         a[++tot].x=__x;a[tot].y=__y;b[tot]=__y;a[tot].id=i;a[tot].f=4;
    49     }
    50     sort(b+1,b+tot+1);
    51     _t=unique(b+1,b+tot+1)-b-1;
    52     inc(i,1,tot)a[i].y=lower_bound(b+1,b+_t+1,a[i].y)-b;
    53     sort(a+1,a+tot+1,cmp);
    54 /*    inc(i,1,tot)printf("%d ",a[i].x);printf("
    ");
    55     inc(i,1,tot)printf("%d ",a[i].y);printf("
    ");
    56     inc(i,1,tot)printf("%d ",a[i].id);printf("
    ");*/
    57     inc(i,1,tot)
    58     if(a[i].id)ans[a[i].id][a[i].f]=sum(a[i].y);
    59     else upd(a[i].y,1);
    60     inc(i,1,m)printf("%d
    ",ans[i][1]+ans[i][4]-ans[i][2]-ans[i][3]);
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    不错的英文商业站点,可以学习
    RegexMagic是好东东,可惜不会用
    PyBlosxom
    computer english
    已经在uubuntu下基本切换到chrome
    supervisor 管理后台进程
    精彩putty教程,乱码=,stdout,stderr重定向
    分析一个软件要考虑的问题
    Google has acquired AppJet Inc
    文件目录相关
  • 原文地址:https://www.cnblogs.com/onlyRP/p/5188404.html
Copyright © 2020-2023  润新知