UVALive 6426

UVALive 6426

/**
          题意:给一个n*m的矩阵,求某一个区间的数的数量
          做法:刚开始想用树状数组,但是RE,题目中说数据是从二进制流中读入,
                    用scanf会挂掉 所以用fread
      读入 size_t fread(void array[],size_t size ,size_t count,stream);
      array[] 用与接受数据的内存的地址
      size 用于读取的字节数,单位是字节  
      count 要进行读写多少个size字节的数据项,每个元素是size字节
       stream :输入流
      long long a;
      fread(&a,sizeof(long long),1,stdin);
      char ch[10];
      fread(ch,sizeof(char),10,stdin); *
*/ #include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <vector> #include <cmath> using namespace std; int a[10008][10008]; int main() { int n,m; int c; fread(&n,sizeof(int),1,stdin); fread(&m,sizeof(int),1,stdin); for(int i=0;i<n;i++) { fread(a[i],sizeof(int),m,stdin); } int l,r; int last = m; while(fread(&l,sizeof(int),1,stdin)) { fread(&r,sizeof(int),1,stdin); int ans = 0; for(int i=0;i<n;i++) { if(a[i][0] > r) break; int ll = lower_bound(a[i],a[i]+last,l)-a[i]; int rr = upper_bound(a[i],a[i]+last,r) -a[i]; if(rr <= ll) continue; ans += rr - ll; } printf("%d\n",ans); } return 0; }

 

你可能感兴趣的:(live)