提交时间:2022-04-12 13:50:10

运行 ID: 48385

#include <iostream> #define ll long long using namespace std; const int N = 200010; const ll MOD = 1000000007; struct Tree { int l,r; ll mul; }t[N<<2]; ll ind[N]; void Build(int id,int a,int b) { t[id].l = a; t[id].r = b; if(a == b) { t[id].mul = ind[a]; return; } int mid = (a + b)>>1; Build(id<<1,a,mid); Build(id<<1|1,mid + 1,b); t[id].mul = t[id<<1].mul * t[id<<1|1].mul % MOD; } void Change(int id,int c) { if(t[id].l == t[id].r&&t[id].l == c) { t[id].mul++; return; } int mid = (t[id].l + t[id].r)>>1; if(c <= mid) Change(id<<1,c); else Change(id<<1|1,c); t[id].mul = t[id<<1].mul * t[id<<1|1].mul % MOD; } int main() { int n,m,T; cin>>n>>m>>T; while(m--) { int x,y; cin>>x>>y; ind[y]++; } ind[1] = 1; Build(1,1,n); cout<<t[1].mul<<endl; while(T--) { int x,y; cin>>x>>y; Change(1,y); cout<<t[1].mul<<endl; } return 0; }