2018年湘潭大学程序设计竞赛 H.统计颜色(结构体+vector)

xiaoxiao2021-02-28  45

       题目链接:https://www.nowcoder.com/acm/contest/105/H

      这道题是一道裸的线段树的题,但我还不会线段树....但是还有另外一种方法,就是用结构体+vector去存每种球的l和r区间,然后遍历每个种类的球在所给的区间里不同球的个数。感觉这种方法很巧妙,需要注意的是结构体开大点,卡65都会段错误,还有就是在ans++后就说明这个种类的球已经在这个区间里存在了,所以加个break跳出这个循环再去找其他的球,不然会超时。

AC代码:

#include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; struct Node{ vector<int> l,r; }c[70]; int n,m; int main() { while(~scanf("%d%d",&n,&m)){ for(int i=0;i<=65;i++){ c[i].l.clear(); c[i].r.clear(); } while(m--){ int k; scanf("%d",&k); if(k == 1){ int x,y,z; scanf("%d%d%d",&x,&y,&z); c[z].l.push_back(x); c[z].r.push_back(y); } else{ int x,y; int ans = 0; scanf("%d%d",&x,&y); for(int i=0;i<=65;i++){ for(int j=0;j<c[i].l.size();j++){ if(c[i].l[j] <= y && c[i].r[j] >= x){ ans++; break; } } } printf("%d\n",ans); } } } return 0; }

转载请注明原文地址: https://www.6miu.com/read-2613703.html

最新回复(0)