제출 #705470

#제출 시각아이디문제언어결과실행 시간메모리
705470hoangnghiep원숭이와 사과 나무 (IZhO12_apple)C++14
0 / 100
97 ms262144 KiB
#include<bits/stdc++.h> #define int long long #define f first #define s second #define repeat(i,a,b) for(int i=a;i<=b;i++) #define pb push_back #define p push #define pii pair<int,int> #define piii pair<int,pair<int,int>> #define vii vector<vector<int>> #define vi vector<int> //#define DEBUG //#define multipletest using namespace std; const int LIM=5e5; const int mod=1e9+7; const int maxn=20; const int inf=1e9; int n,m,x,y,k,t,e,q,d; int dx[8]={1,-1,0,0,-1,-1,1,1}; int dy[8]={0,0,-1,1,1,-1,1,-1}; char c; string s; int a[LIM+5],factorial[(1<<maxn)+5],inv_fact[(1<<maxn)+5]; struct node{ int sum,lazy,tl,tr,l,r; node() : sum(0), lazy(0), l(-1), r(-1) {} }; node segtree[64*LIM+5]; int cnt=1; void push(int node){ if(segtree[node].lazy){ segtree[node].sum=segtree[node].tr - segtree[node].tl+1; int mid=(segtree[node].tl+segtree[node].tr)>>1; if(segtree[node].l==-1){ segtree[node].l=cnt++; segtree[segtree[node].l].tl=segtree[node].tl; segtree[segtree[node].l].tr=mid; } if (segtree[node].r == -1) { segtree[node].r = cnt++; segtree[segtree[node].r].tl = mid + 1; segtree[segtree[node].r].tr = segtree[node].tr; } segtree[segtree[node].l].lazy=segtree[segtree[node].r].lazy=1; segtree[node].lazy=0; } } void update(int node,int l,int r){ push(node); if(l>segtree[node].tr || r<segtree[node].tl){ return; } if(l<=segtree[node].tl && segtree[node].tr<=r){ segtree[node].lazy=1; push(node); return; } int mid=(segtree[node].tl + segtree[node].tr)>>1; if(segtree[node].l==-1){ segtree[node].l=cnt++; segtree[segtree[node].l].tl=segtree[node].tl; segtree[segtree[node].l].tr=mid; } if (segtree[node].r == -1) { segtree[node].r = cnt++; segtree[segtree[node].r].tl = mid + 1; segtree[segtree[node].r].tr = segtree[node].tr; } update(segtree[node].l,l,r); update(segtree[node].r,l,r); segtree[node].sum=segtree[segtree[node].l].sum + segtree[segtree[node].r].sum; } int query(int node, int l, int r) { if(l>segtree[node].tr || r<segtree[node].tl){ return 0; } push(node); if(l<=segtree[node].tl && segtree[node].tr<=r){ return segtree[node].sum; } int mid = (segtree[node].tl + segtree[node].tr) / 2; if (segtree[node].l == -1) { segtree[node].l = cnt++; segtree[segtree[node].l].tl = segtree[node].tl; segtree[segtree[node].l].tr = mid; } if (segtree[node].r == -1) { segtree[node].r = cnt++; segtree[segtree[node].r].tl = mid + 1; segtree[segtree[node].r].tr = segtree[node].tr; } return query(segtree[node].l, l, r) + query(segtree[node].r, l, r); } bool notprime[LIM+5]; map<int,int> mp; char grid[100+5][100+5]; int power(int a,int b){ if(b==0) return 1; int t=power(a,b/2); t = t * t %mod; if(b%2==1) t = t * a %mod; return t; } bool check(int x,int y){ if(x<=0 || x>n || y<=0 || y>m || grid[x][y]=='T'){ return false; } return true; } class DSU{ int *parent; int *rank; int *tot; public: DSU(int n){ rank=new int[n+5]; parent=new int[n+5]; tot=new int [n+5]; for(int i=0;i<n+5;i++){ parent[i]=i; rank[i]=0; tot[i]=1; } } int find(int i){ if(parent[i]==i){ return i; } return parent[i]=find(parent[i]); } void unite(int u,int v){ int i=find(u); int j=find(v); if(i!=j){ if(rank[i]>rank[j]){ parent[j]=i; tot[i]+=tot[j]; } else if(rank[i]<rank[j]){ parent[i]=j; tot[j]+=tot[i]; } else{ parent[j]=i; rank[i]++; tot[i]+=tot[j]; } } } int total(int u){ return tot[u]; } }; void precal(int n){ factorial[0]=1; inv_fact[0]=1; for (int i = 1; i <n; ++i) { factorial[i] = factorial[i - 1] * i % mod; inv_fact[i] = inv_fact[i - 1] * power(i, mod - 2) % mod; } } int choose(int n,int k){ if(k<0 || k>n) return 0; return factorial[n] * inv_fact[n-k] % mod * inv_fact[k] %mod; } void Sieve(){ notprime[0]=notprime[1]=true; for(int i=2;i<LIM+5;++i){ if(notprime[i]==false){ for(int j=i*i;j<LIM+5;j+=i){ notprime[j]=true; } } } } void solve(){ //Sieve(); // precal(); cin>>m; segtree[0].sum=0; segtree[0].lazy=0; segtree[0].tl=1; segtree[0].tr=1e9; int c=0; while(m--){ cin>>d>>x>>y; if(d==1){ c=query(0,x+c,y+c); cout<<c<<endl; } else{ update(0,x+c,y+c); } } } signed main(){ // freopen(".inp","r",stdin); // freopen(".out","w",stdout); ios_base::sync_with_stdio(false); cin.tie(NULL); int test; test=1; #ifdef multipletest cin>>test; #endif while(test--){ solve(); #ifdef DEBUG cerr << "Runtime is: " << clock() * 1.0 / CLOCKS_PER_SEC << endl; #endif } }
#Verdict Execution timeMemoryGrader output
Fetching results...