线段树
来源:互联网 发布:长沙工业软件培训 编辑:程序博客网 时间:2024/06/05 15:19
#include<bits/stdc++.h>//问题可以转化为对区间添值,单点查询此区间有几个值using namespace std;const int maxn=4e5;int ans_to[300],num=0;struct Node{ int root,flag; //flag延迟标记 vector<int>v; //动态加值}c[3*maxn];//-3倍,,,非两倍关系orz..void build(int root,int l,int r){ if(l==r){c[root].flag=0;c[root].v.clear();return;} int mid=(l+r)>>1; build(root<<1,l,mid); build(root<<1|1,mid+1,r); c[root].v.clear(); c[root].flag=0;}void push_down(int root){ if(c[root].flag) { c[root<<1].flag=1; c[root<<1|1].flag=1; for(int i=0;i<c[root].v.size();i++) { c[root<<1].v.push_back(c[root].v[i]); c[root<<1|1].v.push_back(c[root].v[i]); } c[root].flag=0; c[root].v.clear();//清除此区间的值 }}void update(int root,int l,int r,int from,int to,int id){ //push_down(root,l,r); //debug 这写的话就得不到答案了,好久找.. if(l>=from&&r<=to) { c[root].flag=1; c[root].v.push_back(id); return; } //push_down(root,l,r); //debug 不符合的区间被处理的话下次就找不到里面的值了 if(l>to||r<from) return; push_down(root); //debug -ok int mid=(l+r)>>1; update(root<<1,l,mid,from,to,id); update(root<<1|1,mid+1,r,from,to,id);}void query(int root,int l,int r,int x){ if(l==r) { for(int i=0;i<c[root].v.size();i++) ans_to[num++]=c[root].v[i]; return; } push_down(root); int mid=(l+r)>>1; if(x<=mid) query(root<<1,l,mid,x); else query(root<<1|1,mid+1,r,x);}int isleap(int y){ if(y%400==0||(y%4==0)&&(y%100!=0)) return 1; return 0;}int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int _day[3000][14][35];void init(){int s=1; for(int y=2000;y<=2999;y++) { int flag=isleap(y); if(flag) month[2]++; for(int m=1;m<=12;m++) { for(int d=1;d<=month[m];d++) { _day[y][m][d]=s++; } } if(flag) month[2]--; } //cout<<s<<endl;}int jud(int y,int m,int d,int y1,int m1,int d1){ if((y<y1-1)||(y<y1&&m1+12>m+1)||(y<y1&&d1>=d)||(y==y1&&(m+1<m1||(m+1==m1&&d1>=d)))) return 1; return 0;}int main(){ //freopen("C:/Users/hzy/Desktop/11.txt","r",stdin); init(); int n; while(scanf("%d",&n)!=EOF) { build(1,1,_day[2999][12][31]); for(int i=0;i<n;i++) { int y,m,d,y1,m1,d1,id; scanf("%d%d%d%d%d%d%d",&y,&m,&d,&y1,&m1,&d1,&id); if(!jud(y,m,d,y1,m1,d1)) continue; int s1=_day[y][m][d],s2=_day[y1][m1][d1]; update(1,1,_day[2999][12][31],s1,s2,id); } int cm; scanf("%d",&cm); while(cm--) { int y,m,d; scanf("%d%d%d",&y,&m,&d); int s=_day[y][m][d]; num=0; query(1,1,_day[2999][12][31],s); sort(ans_to,ans_to+num); printf("%d ",num); for(int i=0;i<num;i++) printf("%d ",ans_to[i]);printf("\n"); } } return 0;}
阅读全文
0 0
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 库克专访:看好AR和机器学习,将进一步提升硬件性能
- 苹果加入WPC无线充电联盟,iPhone 8无线充电真的要来了?
- 苹果独占智能手机行业92%的利润,三星仅为9%
- 谷歌Material Design首席设计师离职,加盟Dropbox
- 商务时尚新选择vivo X9Plus星空灰图赏
- 线段树
- Python HTTP响应状态码
- 亚马逊创始人贝佐斯专访:Alexa 寄托亚马逊的雄心壮志
- 2017 美国工程院院士名单公布,Lecun、沈向洋、黄永刚、张东晓、陈向力等多人入选
- 1115. Counting Nodes in a BST (30)
- 鹿晗的清晗基金所投APP涉嫌“情色社交”
- 白色版小米MIX今日首发,10点开抢
- 新风格新味道 vivo X9Plus全新星空灰配色曝光
- 我分析了42万字歌词,就为了搞清楚民谣歌手们在唱些什么