标签:数据 递增 algorithm lib amp printf namespace 相同 开始
/* 虽然题目没说,但是读入有以下特点 由于,输入是按照按照y递增,如果y相同则x递增的顺序给出的 所以,可以利用入读的时间进行降为处理 */
于是我们就得到了一个一维的树状数组解法啦
值得一提:坐标从0~32000,而树状数组是从1开始的
于是,我们对所有下标+1,数组开到32002就可以啦!
1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <iostream> 10 #include <algorithm> 11 using namespace std; 12 const int MAXN=15001,MAXX=32002; 13 int t[MAXX],n; 14 int lb(int i){return i&-i;} 15 void init(){memset(t,0,sizeof(t));} 16 void add(int x,int v){for(int i=x;i<MAXX;i+=lb(i))t[i]+=v;} 17 int sum(int x){int ans=0;for(int i=x;i;i-=lb(i))ans+=t[i];return ans;} 18 19 int level[MAXN],x,y; 20 int main(){ 21 scanf("%d",&n); 22 for(int i=1;i<=n;i++)scanf("%d%d",&x,&y),level[sum(x+1)]++,add(x+1,1); 23 for(int i=0;i<n;i++)printf("%d\n",level[i]); 24 return 0; 25 }
标签:数据 递增 algorithm lib amp printf namespace 相同 开始
原文地址:https://www.cnblogs.com/JasonCow/p/12292308.html