zoukankan      html  css  js  c++  java
  • bzoj 3289: Mato的文件管理

    莫队加树状数组

      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<cstdlib>
      5 #include<cmath>
      6 #include<queue>
      7 #include<algorithm>
      8 #include<vector>
      9 #define M 2000009
     10 #define EPS 1e-10
     11 #define MO 10000
     12 #define ll long long
     13 using namespace std;
     14 ll read()
     15 {
     16     char ch=getchar();
     17     ll x=0,f=1;
     18     for(;ch<'0'||ch>'9';ch=getchar())
     19         if(ch=='-')
     20           f=-1;
     21     for(;ch>='0'&&ch<='9';ch=getchar())
     22         x=x*10+ch-'0';
     23     return x*f;
     24 }
     25 int belong[M],n,a[M],q,m,h[M],ans[M];
     26 int shu[M],shu1[M];
     27 struct data
     28 {
     29     int x,y,id;
     30 }b[M];
     31 bool cmp(data a1,data a2)
     32 {
     33     if(belong[a1.x]==belong[a2.x])
     34       return a1.y<a2.y;
     35     return belong[a1.x]<belong[a2.x];
     36 }
     37 int xun(int x)
     38 {
     39     int sum=0;
     40     for(;x;x-=x&-x)
     41       sum+=shu[x];
     42     return sum;
     43 }
     44 int xun1(int x)
     45 {
     46     int sum=0;
     47     for(;x;x-=x&-x)
     48       sum+=shu1[x];
     49     return sum;
     50 }
     51 void jia(int x)
     52 {
     53     for(;x<h[0];x+=x&-x)
     54       shu[x]++;
     55 }
     56 void jia1(int x)
     57 {
     58     for(;x<h[0];x+=x&-x)
     59       shu1[x]++;
     60 }
     61 void jian(int x)
     62 {
     63     for(;x<h[0];x+=x&-x)
     64       shu[x]--;
     65 }
     66 void jian1(int x)
     67 {
     68     for(;x<h[0];x+=x&-x)
     69       shu1[x]--;
     70 }
     71 int main()
     72 {
     73     n=read();
     74     for(int i=1;i<=n;i++)
     75       h[i]=a[i]=read();
     76     sort(h+1,h+n+1);
     77     h[0]=unique(h+1,h+n+1)-h;
     78     for(int i=1;i<=n;i++)
     79       a[i]=lower_bound(h+1,h+h[0],a[i])-h;
     80     q=read();
     81     for(int i=1;i<=q;i++)
     82       {
     83           b[i].x=read();
     84           b[i].y=read();
     85           b[i].id=i;
     86       }
     87     m=sqrt(n);
     88     for(int i=1;i<=q;i++)
     89       belong[i]=i/m+1;
     90     sort(b+1,b+q+1,cmp);
     91     int l=0,r=0,sum=0;
     92     for(int i=1;i<=q;i++)
     93       {
     94         for(;r<b[i].y;r++)
     95           {
     96             sum+=xun1(h[0]-a[r+1]);
     97             jia1(h[0]-a[r+1]);
     98             jia(a[r+1]);
     99           }
    100         for(;r>b[i].y;r--)
    101           {
    102             jian1(h[0]-a[r]);
    103             jian(a[r]);
    104             sum-=xun1(h[0]-a[r]);
    105           }
    106         for(;l<b[i].x;l++)
    107           {
    108             if(!l)
    109               continue;
    110             jian(a[l]);
    111             jian1(h[0]-a[l]);
    112             sum-=xun(a[l]);
    113           }
    114         for(;l>b[i].x;l--)
    115           {
    116             sum+=xun(a[l-1]);
    117             jia(a[l-1]);
    118             jia1(h[0]-a[l-1]);
    119           }
    120         ans[b[i].id]=sum;
    121       }
    122     for(int i=1;i<=q;i++)
    123       printf("%d
    ",ans[i]);
    124 }
    125 
  • 相关阅读:
    QWT编译与配置-Windows/Linux环境
    Manjaro Linux KDE个人的一些安装配置
    2019嵌入式之路的反思
    Linux内核调用I2C驱动_驱动嵌套驱动方法
    Ubuntu Linux TinySerial串口调试助手 可视化界面 安装使用
    ZYNQ的Linux Linaro系统镜像制作SD卡启动
    eclipse CDT Error: Program "g++" not found in PATH
    js Date格式化时间兼容写法
    ajax多图片上传demo
    php文件上传$_FILES数组格式
  • 原文地址:https://www.cnblogs.com/xiw5/p/5656584.html
Copyright © 2011-2022 走看看