icpc2019 南京网络赛选拔赛 A 二维数点+蛇形填数
时间:2019-09-03
本文章向大家介绍icpc2019 南京网络赛选拔赛 A 二维数点+蛇形填数,主要包括icpc2019 南京网络赛选拔赛 A 二维数点+蛇形填数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
做法:
把每次询问按容斥定理分成四个二维前缀和查询,然后对x排序,扫描线即可
#pragma GCC optimize("Ofast") #include<bits/stdc++.h> #define ll long long #define ull unsigned long long #define fi first #define se second #define mp make_pair #define pii pair<ll,ll> #define all(x) x.begin(),x.end() #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define rep(ii,a,b) for(int ii=a;ii<=b;++ii) #define per(ii,a,b) for(int ii=b;ii>=a;--ii) #define forn(i,x,g,e) for(int i=g[x];i;i=e[i].next) #define show(x) cout<<#x<<"="<<x<<endl #define showa(a,b) cout<<#a<<'['<<b<<"]="<<a[b]<<endl #define show2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl #define show3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define show4(w,x,y,z) cout<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define show5(v,w,x,y,z) cout<<#v<<"="<<v<<" "<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define showmm(x,a,b) rep(i,0,a) rep(j,0,b) cout<<#x<<'['<<i<<']'<<'['<<j<<"]="<<x[i][j]<<(" \n"[j==b]) #define showm(x,a,b) rep(i,0,a) rep(j,0,b) cout<<x[i][j]<<(" \n"[j==b]) #define showa1(x,a,b) cout<<#x<<":\n";rep(i,a,b) showa(x,i);cout<<endl #define showa2(x,a,b) cout<<#x<<": ";rep(i,a,b) cout<<x[i]<<' ';cout<<endl using namespace std;//head const int maxn=1e6+10,maxm=2e6+10; const ll INF=0x3f3f3f3f,mod=1e9+7; int casn,n,m,k,num[maxn]; namespace fastio{//@支持读取整数,字符串,输出整数@ bool isdigit(char c){return c >= 48 && c <= 57;} const int maxsz=1e7; class fast_iostream{public: char ch=get_char(); bool endf=1,flag; char get_char(){ static char buffer[maxsz],*a=buffer,*b=buffer; return b==a&&(b=(a=buffer)+fread(buffer,1,maxsz, stdin),b==a)?EOF:*a++; } template<typename type>bool get_int(type& tmp){ flag=tmp=0; while(!isdigit(ch)&&ch!=EOF){flag=ch=='-';ch=get_char();}; if(ch==EOF)return endf=0; do{tmp=ch-48+tmp*10;}while(isdigit(ch=get_char())); if(flag)tmp=-tmp; return 1; } int get_str(char* str){ char* tmp=str; while(ch=='\r'||ch=='\n'||ch==' ')ch=get_char(); if(ch==EOF)return(endf=0),*tmp=0; do{*(tmp++)=ch;ch=get_char();}while(ch!='\r'&&ch!='\n'&&ch!=' '&&ch!=EOF); *(tmp++)=0; return(int)(tmp-str-1); } fast_iostream& operator>>(char* tmp){get_str(tmp);return *this;} template<typename type>fast_iostream& operator>>(type& tmp){get_int(tmp);return *this;} operator bool() const {return endf;} }; }fastio::fast_iostream io; int a[maxn]; struct bit{ ll node[maxn],n; inline int lb(int x) {return x&(-x);} void init(int _n){n=_n;fill_n(node,n+2,0);} inline void update(int pos,ll val){ if(pos>0)for(int i=pos;i<=n;i+=lb(i)) node[i]+=val; } inline ll ask(int pos){ ll sum=0; if(pos>0)for(int i=pos;i;i-=lb(i)) sum+=node[i]; return sum; } inline ll query(int l,int r){ return ask(r)-ask(l-1); } }tree; struct node{int x,y,id;ll val;}point[maxn],ask[maxn]; int cmp(node a,node b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x; } ll ans[maxn]; ll getv(int x,int y){ x-=n/2-1;y-=n/2-1; ll tmp=max(abs(x),abs(y)); if(x>=y) return 1ll*n*n-4*tmp*tmp-2*tmp-x-y; else return 1ll*n*n-4*tmp*tmp+2*tmp+x+y; } int cal(ll v){ ll ans=0; while(v){ans+=v%10;v/=10;} return ans; } int main() { io>>casn; while(casn--){ io>>n>>k>>m; int cnt=0; rep(i,1,k){ io>>point[i].x>>point[i].y; point[i].id=i; point[i].val=cal(getv(point[i].x,point[i].y)); } sort(point+1,point+1+k,cmp); rep(i,1,m){ ans[i]=0; int a,b,c,d; io>>a>>b>>c>>d; ask[++cnt]={c,d,i,1}; ask[++cnt]={a-1,d,i,-1}; ask[++cnt]={c,b-1,i,-1}; ask[++cnt]={a-1,b-1,i,1}; } sort(ask+1,ask+1+cnt,cmp); int l=1; tree.init(n+1); rep(i,1,cnt){ while(l<=k&&point[l].x<=ask[i].x){ tree.update(point[l].y,point[l].val); l++; } int id=ask[i].id; ans[id]+=ask[i].val*tree.query(1,ask[i].y); } rep(i,1,m) printf("%lld\n",ans[i]); } return 0; }
原文地址:https://www.cnblogs.com/nervendnig/p/11453153.html
- 为什么不是0,1,2,3,4?setTimeout的奇怪问题
- Linux基础(day67)
- 深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer
- 19.10 处理图形中的乱码
- 《深入理解C# 3.x的新特性》博文系列汇总
- 十一国庆节 之 “变量与函数同名时,会输出谁?”
- 挖坑无止境,来看看这个《this的指向》
- T-SQL Enhancement in SQL Server 2005[上篇]
- 初学js钻太深,不太好
- Linux shell 程序设计3——命令行程序
- Linux shell 程序设计2——bash的内置命令
- T-SQL Enhancement in SQL Server 2005[下篇]
- JS原型,a和b是不是失散多年的兄弟?
- Linux shell 程序设计1——安装及入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django-models & QuerySet API
- [奇淫巧技]GitHub个人页的新玩法
- 一致性哈希的分析与实现
- 关系型数据库查询语言 SQL 和图数据库查询语言 nGQL 对比
- 目标检测之评价指标 - mAP
- sass的基础用法
- Golang Gin 实战(十四)| 文件托管、反向代理百度网站、自实现API网关
- ceph修复pg inconsistent
- 基于kubernetes的kong网关实战
- 移动端适配必须掌握的基本概念和适配方案
- [OHIF-Viewers]医疗数字阅片-医学影像-Redux中的reducer到底是什么,以及它为什么叫reducer?
- 【从零开始用Swift开发一个iOS应用(仿微博)】开篇-1. demo上手体验
- 数据结构与算法-二维数组中的查找
- 卷积神经网络之 - GoogLeNet / Inception-v1
- 卷积神经网络之 - Alexnet